2012-05-08 9 views
0

私は、AsyncTaskオブジェクト内のローカルデータストレージを検証するXMLデータをたくさん処理しています。まず、これらの操作にトランザクションを使用しようとしましたが、トランザクションが進行中にユーザーが他のアクションを実行すると、アプリケーションがフリーズしてトランザクションが終了するのを待って、アプリケーションが応答しなくなることさえあります。Android、SQLiteトランザクションとプロセスフリーズ

トランザクションはいくつかのステップに分割され、繰り返しごとに数百にカウントされることがあります。この問題のために、私はトランザクションを使用してリアルタイムクエリに行きましたが、これは非常に遅いですが、フリーズを解決し、非常にバッテリを消費するアプリケーションにつながりました。

私の質問は、トランザクションを停止してデータベースをロックする方法はありますか?または、私の問題は取引前に準備が整っていないことの結果ですか?

+0

適切な 'ContentProvider'を実装し、適切な数の' ContentProviderOperation.Builder#withYieldAllowed() 'を使って' ContentProviderOperation'sを使用することができます。このパターンを正しく実装する最も良い方法は、抽象クラス[SQLiteContentProvider](http://www.java2s.com/Open-Source/Android/android-latform-packages/providers-CalendarProvider/com/android/providers/)をコピーすることです。 calendar/SQLiteContentProvider.java.htm)を使用します。 – Jens

+0

これを見ていきます。 – Daniel

答えて

0

トランザクションは、ビジネス中にテーブルをロックする傾向があります。そのため、同じインスタンスでトランザクションとトランザクション以外のクエリを同時に実行する方法はありません。

しかし、まずデータ(xml)を処理して(時間がかかるかもしれない)、後でデータを準備してからトランザクションを開始する必要があります。

P.S.すべての挿入を処理してSQLite操作を高速化するために、単一のジャーナルファイルを作成するので、複数のレコードを挿入するときにトランザクションを(効率的な方法で)利用するよう個人的に提案します。

関連する問題