我有一个扩展异步任务的 DownLoadData 类,用于从 Web 服务下载主数据。SQLite 数据库中有 10 个主表,每个表都需要单独的 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();
}
我还在所有线程中使用相同的数据库实例。