1

たくさんのsqlliteトランザクションを実行しているアプリケーションがありますが、UIスレッドでsqlliteアクションを実行しているため、現在少しハングしています...はい悪い...

だから私は各アイテムにスレッドを持たせ、sqllite apiがそれらをFIFOするのに十分賢いと仮定してそれを実行しました..いいえ...今、私はデータベースがロックされた例外を取得します

これはうまくいくはずだと言っています

コードを完全に書き直さずに、トランザクションのリストをキューに入れて、それらをすべて同じスレッドで実行する必要はありません(多くの異なるクラスは、一種の苦痛になります)

ロックがない限り、スレッドをチェックして実行しない方法はありますか?ロックチェック自体、またはこれを機能させる類似のものは効率的であり、大規模な書き直しではありませんか?

ありがとう

4

1 に答える 1

1

あなたが引用した私の答えは紛らわしいようです。複数のスレッドで同じデータベースオブジェクトを使用して同じAndroidデータベースにアクセスする場合は、特別なことをする必要はありません。裏で、Sqliteには、データベースが破損しないことを保証する独自のロックがあります。私の答えを引用するには;

AndroidでのSqliteはシングルスレッドです。複数のスレッドが同じデータベース接続を使用している場合でも、それらが同時に実行されるのはブロックされると私は理解しています。この制限を回避する方法はありません

リクエストをシリアル化する独自のロックがあります。これは、複数のスレッドを追加しても、残念ながらデータベースのパフォーマンスが向上しないことを意味します。

私の他の回答が述べているように、ロックがなく、データベースが破損するため、複数のスレッドから同じデータベースに対して複数のデータベースオブジェクトを使用することはできません。

于 2013-02-18T14:54:04.470 に答える