【发布时间】:2013-04-26 22:53:01
【问题描述】:
我有一个 SQLite 数据库,它在我的应用程序中得到了大量使用。访问地址:
- 各种活动,通过 ASyncTasks 将数据加载到 UI 中(仅限 select 语句)
- 多个后台进程(一次只能运行其中一个),它们执行许多插入/更新
我调用一次 getWritableDatabase() 并在任何地方使用它。每个后台进程都使用 IMMEDIATE(即非锁定)事务,这会将其中一些进程从几分钟缩短到几秒钟。
这一切都在 Jellybean 之前完美运行;后台进程具有事务的速度优势,但这并没有阻止 Activites 通过 ASyncTasks 加载数据。
在 Jellybean 之后,每个用于 GUI 的 ASyncTask 加载数据在事务进行时都会被阻止,因此通常会在几秒钟内不返回。这使得导航缓慢而令人沮丧。我已将阻塞隔离到 rawQuery 数据库调用。
除了不推荐使用的几种方法 - http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#isDbLockedByOtherThreads() - 使用像 这样的 cmets 之外,我找不到任何文档可以准确说明 Jellybean 中发生的变化“不再有数据库锁的概念,所以这个方法总是返回 false。”
有没有一种简单的方法来模仿前果冻豆的行为?
【问题讨论】:
标签: android sqlite android-sqlite