Android 安卓何时关闭数据库

Android 安卓何时关闭数据库,android,sqlite,asynchronous,cursor,Android,Sqlite,Asynchronous,Cursor,我有一个主要的活动,用户可以使用一个viewpager和一个数据库适配器来提供视图。 最初,Db中的所有行都被拉入游标(异步) 返回此游标后,用户可以添加来自不同活动的各种搜索条件,然后通过异步评分算法运行所有数据 我收到了一些关于没有关闭数据库的数据库错误,因此我在onPause中关闭了游标和数据库,并在onResume中重新实例化了它们。这将很好地工作,但建立评分搜索标准的活动将针对结果启动。当他们返回到主线程时,onActivityResult在resume上被调用,因此我无法从这里运行评

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

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

我收到了一些关于没有关闭数据库的数据库错误,因此我在onPause中关闭了游标和数据库,并在onResume中重新实例化了它们。这将很好地工作,但建立评分搜索标准的活动将针对结果启动。当他们返回到主线程时,onActivityResult在resume上被调用,因此我无法从这里运行评分算法,因为光标还不存在(必须在onResume中重新创建)

现在,如果我想在asyncTask运行时切换活动,我不能在onPause中关闭游标和Db

有人有什么想法吗?我的“设计”根本上有缺陷吗


谢谢,m

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

嗯,虽然当我查阅参考资料时,它建议使用一个新的cusorLoader和兼容库

不过,这个链接应该可以帮助您开始


onPostExecute()
中,从
Async
分配给say
myCursor
游标
需要管理。如果您想要一个简单的管理解决方案,您可以覆盖onDestroy()

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

    ...

@Override
protected
void onDestroy() {

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

    super.onDestroy();

}
为我工作:)