数据库的 SQLiteConnection 对象泄露了!请修复您的应用程序

新手上路,请多包涵

我的应用程序给我这个警告

数据库 ‘+data+data+com_example_test+database’ 的 SQLiteConnection 对象被泄露了!请修复您的应用程序以正确结束正在进行的事务并在不再需要时关闭数据库。

但是每次使用后我都会关闭 db 对象和游标。

         try {
            while (cursor.moveToNext()) {
              ...
            }
        } finally {
            if (cursor != null && !cursor.isClosed())
                cursor.close();
        }

...
    db.close();

你能帮我理解问题是什么吗?谢谢!!!

更新! 尽管一切都关闭了,但我从这篇文章 SQLite Connection leaked 中尝试了这个解决方案

而且我不再有内存泄漏,这是一个好的解决方案吗?

原文由 user3906040 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 519
1 个回答

可能的解决方案

  • 你有 not committed the transactions 你已经开始(一旦你开始你应该总是关闭交易)
  • 如果您正在使用 Sqlite ,请检查您是否已关闭打开的游标—(看起来您已经从您发布的代码中完成了这一步)
  • 同时将 db.close 移动到 finally
  • 在使用 --- 删除数据库之前,您没有在数据库上调用 db.close 然后使用 context.deleteDatabase(...) dbHelper.getWritableDatabase() 创建它

原文由 Devrath 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题