【问题标题】:Android when to close database dilemmaAndroid何时关闭数据库困境
【发布时间】:2011-11-27 21:25:30
【问题描述】:

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

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

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

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

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

谢谢,米

【问题讨论】:

    标签: android sqlite asynchronous cursor


    【解决方案1】:

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

    嗯,虽然当我查看参考资料时,它建议使用新的 cusorLoader 并使用兼容性库。

    此链接应该可以帮助您入门

    Developer Docs - Activity.startManagingCursor()

    【讨论】:

      【解决方案2】:

      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();
      
      }
      

      为我工作:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-04
        相关资源
        最近更新 更多