2

我有一个扩展异步任务的 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();
}

我还在所有线程中使用相同的数据库实例。

4

1 回答 1

0

我通过将每个单独的线程视为单个事务而不是所有线程的单个事务来克服 JellyBean 中的问题

于 2014-02-11T04:26:48.493 回答