私は自分のアプリで頻繁に使用される SQLite データベースを持っています。次からアクセスします。
- ASyncTasks を介して UI にデータをロードするためのさまざまなアクティビティ (select ステートメントのみ)
- 多くの挿入/更新を行う複数のバックグラウンド プロセス (一度に実行できるプロセスは 1 つだけ)
getWritableDatabase() を 1 回呼び出すと、これをどこでも使用できます。バックグラウンド プロセスのそれぞれは IMMEDIATE (つまり、非ロック) トランザクションを使用します。これにより、一部のプロセスが数分から数秒に高速化されます。
これはすべて、ジェリービーン以前は完全に機能していました。バックグラウンド プロセスにはトランザクションの速度の利点がありましたが、Activite が ASyncTasks を介してデータをロードすることをブロックしませんでした。
Jellybean の後、GUI のデータをロードする各 ASyncTask は、トランザクションの進行中にブロックされるため、数秒間戻らないことがよくあります。これにより、ナビゲーションが遅くなり、イライラします。ブロッキングを rawQuery データベース呼び出しに分離しました。
廃止されたいくつかのメソッドを除いて、ジェリービーンで何が変更されたかを正確に指定するドキュメントが見つかりません-http ://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#isDbLockedByOtherThreads() -コメント付き「データベース ロックの概念がなくなったため、このメソッドは常に false を返します。」
ジェリービーン以前の動作を模倣する簡単な方法はありますか?