【问题标题】:What is the Default Threading mode of SQLite in Android?Android中SQLite的默认线程模式是什么?
【发布时间】:2012-06-23 07:52:58
【问题描述】:

http://www.sqlite.org/threadsafe.html

从上面的链接我了解到,SQLite 支持三种不同的线程模式:单线程、多线程和序列化。我只是想知道“Android中SQLite的默认线程模式是什么”?有什么方法可以务实地改变线程模式吗?如果是这样,我如何以及有什么优势?什么时候选择哪一个有一些样例?

提前致谢。

【问题讨论】:

    标签: android sqlite sqliteopenhelper


    【解决方案1】:

    默认模式 - Serialized

    默认 SqliteDatabase 是线程安全的,你可以在 Android Docs 上查看,

    setLockingEnabled(boolean lockingEnabled)

    来自文档 -

    通过使用控制 SQLiteDatabase 是否是线程安全的 锁定关键部分。这是相当昂贵的,所以如果你 知道您的数据库只会被单个线程使用,那么您应该 将此设置为假。默认为真。

    【讨论】:

    • 是的,正如 Sqlite 文档所声明的那样 - The default mode is serialized.
    • 德克萨斯州。如链接中所述,是否有任何方法可以在单线程模式和多线程模式之间切换,或者有任何方法可以在开始时覆盖它们。再次发送以快速响应。
    • 不,目前我不知道改变模式。
    • @vrs SQLite 文档提到线程参数必须在初始化时设置,所以我认为一旦数据库运行就不可能更改。 sqlite.org/threadsafe.html 我不认为这在 Android 上有所改变。
    • 请注意,自 API 16 起,setLockingEnabled 已被弃用
    【解决方案2】:

    sqlite的线程模式可以在编译时、启动时和运行时进行配置。

    运行时覆盖开始时间,开始时间覆盖编译时间。除了,单线程模式一旦选择就不能被覆盖。见sqlite threadsafe

    Android 在编译时使用Serialized。见sqlite Android.bp

    但是,从 4.2.2 开始,android 在启动时选择 Multi-thread。见android_database_SQLiteGlobal.cpp

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-29
      • 2021-04-22
      • 2015-04-10
      • 1970-01-01
      • 1970-01-01
      • 2016-04-16
      • 2017-10-31
      相关资源
      最近更新 更多