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