Android SQLite:如果我的应用程序仅用于 API >= 11,我应该对所有事务使用 beginTransactionNonExclusive() 而不是 beginTransaction() 吗?

Ran*_*ku' 7 sqlite android transactions

当在做Android的交易,也有beginTransaction()beginTransactionNonExclusive()方法,从API 11起。

对我来说,文档中并不清楚我的应用程序是否仅针对 API 11 及更高版本的设备,我应该将其beginTransactionNonExclusive()用于我的应用程序中的所有事务。有什么缺点吗?

还提到,如果我理解正确,为了beginTransactionNonExclusive()正常工作,数据库必须启用预写日志记录。

我试图寻找一些关于此的文章,但我无法从谷歌找到任何关于此的内容,我发现这篇文章看起来很棒,但它是日文的。

任何指导何时以及如何beginTransactionNonExclusive()使用的帮助将不胜感激。

小智 3

我认为你应该beginTransactionNonExclusive与 一起使用enableWriteAheadLogging

根据文档:

每当多个线程同时访问和修改数据库时,启用预写日志记录是一个好主意。然而,预写日志记录比普通日志记录使用更多的内存,因为同一个数据库有多个连接。因此,如果数据库仅由单个线程使用,或者优化并发性不是很重要,则应禁用预写日志记录。]

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

  • 如果使用beginTransactionNonExclusive,那么enableWriteAheadLogging是在内部设置的,所以不需要额外调用它:“编写者应该使用beginTransactionNonExclusive()或beginTransactionWithListenerNonExclusive(SQLiteTransactionListener)来启动事务。非独占模式允许其他线程读取数据库文件执行查询。” (2认同)