Web サービスからマスター データをダウンロードするために使用される非同期タスクを拡張する DownLoadData クラスがあります。SQLite データベースには 10 個の masters テーブルがあり、それぞれに個別の Web サービス呼び出しが必要です。したがって、DownLoadData タスクには 10 個のスレッドがあります。それぞれがそれぞれの Web サービスを呼び出し、データを受け取り、それをそれぞれのテーブルに挿入します。
でトランザクションを開始し、_onPreExecute()_
すべてのスレッドが終了したかどうかを確認した後、でトランザクションを終了し_onPostExecute()_
ます。
問題は、このアプローチが ICS までのバージョンで完全に機能したことです。JellyBean では動作しないようです。アプリは、60 秒ごとに次の logcat メッセージでハングします。
04-02 14:53:23.263: W/SQLiteConnectionPool(1409): The connection pool for database '/data/data/com.c2info.liveorder/databases/DB' has been unable to grant a connection to thread 117 (AsyncTask #2) with flags 0x1 for 30.010002 seconds.
04-02 14:53:23.263: W/SQLiteConnectionPool(1409): Connections: 0 active, 1 idle, 0 available.
次のようにトランザクションを開始および終了します。
public LocalDatabase beginTransact() {
mdbHelper = new DatabaseHelper(ctx);
mdb = mdbHelper.getWritableDatabase();
execSQL("BEGIN");
return this;
}
public void endTransact() {
execSQL("END");
mdbHelper.close();
}
また、すべてのスレッドで同じ DB インスタンスを使用しています。