【发布时间】:2012-06-23 07:52:58
【问题描述】:
http://www.sqlite.org/threadsafe.html
从上面的链接我了解到,SQLite 支持三种不同的线程模式:单线程、多线程和序列化。我只是想知道“Android中SQLite的默认线程模式是什么”?有什么方法可以务实地改变线程模式吗?如果是这样,我如何以及有什么优势?什么时候选择哪一个有一些样例?
提前致谢。
【问题讨论】:
标签: android sqlite sqliteopenhelper
http://www.sqlite.org/threadsafe.html
从上面的链接我了解到,SQLite 支持三种不同的线程模式:单线程、多线程和序列化。我只是想知道“Android中SQLite的默认线程模式是什么”?有什么方法可以务实地改变线程模式吗?如果是这样,我如何以及有什么优势?什么时候选择哪一个有一些样例?
提前致谢。
【问题讨论】:
标签: android sqlite sqliteopenhelper
默认模式 - Serialized
默认 SqliteDatabase 是线程安全的,你可以在 Android Docs 上查看,
setLockingEnabled(boolean lockingEnabled)
来自文档 -
通过使用控制 SQLiteDatabase 是否是线程安全的 锁定关键部分。这是相当昂贵的,所以如果你 知道您的数据库只会被单个线程使用,那么您应该 将此设置为假。默认为真。
【讨论】:
The default mode is serialized.
sqlite的线程模式可以在编译时、启动时和运行时进行配置。
运行时覆盖开始时间,开始时间覆盖编译时间。除了,单线程模式一旦选择就不能被覆盖。见sqlite threadsafe
Android 在编译时使用Serialized。见sqlite Android.bp。
但是,从 4.2.2 开始,android 在启动时选择 Multi-thread。见android_database_SQLiteGlobal.cpp
【讨论】: