Android什么时候关闭数据库困境

时间:2011-09-29 17:14:45

标签: android sqlite asynchronous cursor

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

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

我收到了一些关于没有关闭数据库的数据库错误,所以我在onPause中关闭了光标和数据库,并在onResume中重新实例化了它们。这样可以正常工作,但是为结果开始构建评分搜索条件的活动。当它们返回主线程时onActivityResult在恢复之前被调用,因此我无法从此处运行评分算法,因为光标尚不存在(必须在onResume中重新创建)。

现在,如果我希望能够在asyncTask运行时切换活动,我无法关闭光标和onPause中的Db。

有没有人有任何想法?我的“设计”是否存在根本缺陷?

谢谢,m

2 个答案:

答案 0 :(得分:0)

您应该将光标传递给要管理的活动,以便在删除活动时光标自动关闭。

嗯,虽然当我查阅引用时,它建议使用新的cusorLoader并使用兼容性库。

这个链接可以帮助你开始

Developer Docs - Activity.startManagingCursor()

答案 1 :(得分:0)

Cursor result myCursor onPostExecute()来自Async的{​​{1}}需要进行管理。如果您想要一个简单的管理解决方案,可以覆盖onDestroy()

@Override
protected void onPostExecute(Cursor result) {
      myCursor = result;
}

    ...

@Override
protected
void onDestroy() {

    if (myCursor != null) myCursor.close();
    myCursor = null; /* GC */

    super.onDestroy();

}

适合我:)