Android何时关闭数据库的困境



我有一个主活动,它用户一个viewpager和一个数据库适配器来提供视图。最初,Db中的所有行都被拉入游标(异步)

返回游标后,用户可以添加来自不同活动的各种搜索条件,然后通过异步评分算法运行所有数据。

我得到了一些数据库错误,没有关闭数据库,所以我关闭了游标和onPause中的数据库,并在onResume中重新实例化了它们。这将工作得很好,但建立得分的搜索标准的活动是为结果而开始的。当他们返回到主线程onActivityResult在resume之前被调用,所以我不能从这里运行得分算法,因为光标还不存在(它必须在onResume中重新创建)。

现在,如果我想能够切换活动,而asyncTask正在运行,我不能关闭游标和Db在onPause。

有人有什么想法吗?我的"设计"是否存在根本性缺陷?

应该将光标传递给要管理的活动,这样当活动被删除时,光标就会自动关闭。

嗯,虽然当我查找参考时,它建议使用新的cusorLoader和使用兼容性库。

这个链接应该可以让你开始

Developer Docs - Activity.startManagingCursor()

Async分配到onPostExecute()中的myCursorCursor result需要管理。如果你想要一个简单的管理解决方案,你可以重写onDestroy()

@Override
protected void onPostExecute(Cursor result) {
      myCursor = result;
}
    ...
@Override
protected
void onDestroy() {
    if (myCursor != null) myCursor.close();
    myCursor = null; /* GC */
    super.onDestroy();
}

最新更新