在实际使用和 SQLite 文档的上下文中,EnableWriteAheadLogging 的线程安全性如何?

How thread safe is EnableWriteAheadLogging in the context of real usage and SQLite documentation?

android 文档在此处描述了 "EnableWriteAheadLogging":

http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#enableWriteAheadLogging()

"This method enables parallel execution of queries from multiple threads on the same database"

但是,根据 SQLite 文档:https://www.sqlite.org/threadsafe.html

SQLite 有两种多线程:"Serialized" 和 "Mulit-thread"。使用"EnableWriteAheadLogging"时用的是哪个?

此外,如果我的应用程序和后台服务都需要访问我的数据库,使用 EnableWriteAheadLogging 是否有帮助?我应该采取哪些措施来确保这可以以线程安全的方式完成?

这与线程无关安全

在 WAL 模式下,writer 不会阻塞 reader,因此 Android 框架认为在这种情况下使用更大的连接池是个好主意。

也可能不是,如 this comment 所示:

private void setMaxConnectionPoolSizeLocked() {
    if ((mConfiguration.openFlags & SQLiteDatabase.ENABLE_WRITE_AHEAD_LOGGING) != 0) {
        mMaxConnectionPoolSize = SQLiteGlobal.getWALConnectionPoolSize();
    } else {
        // TODO: We don't actually need to restrict the connection pool size to 1
        // for non-WAL databases. There might be reasons to use connection pooling
        // with other journal modes. For now, enabling connection pooling and
        // using WAL are the same thing in the API.
        mMaxConnectionPoolSize = 1;
    }
}