我的应用程序给了我这样的警告
数据库‘+DATA+DATA+COM_EXAMPLE_TEST+DATABASE’的SQLiteConnection对象被泄漏!请修复您的应用程序以正确结束正在进行的事务,并在不再需要时关闭数据库。
但每次使用后,我都会关闭db对象和游标。
try {
while (cursor.moveToNext()) {
...
}
} finally {
if (cursor != null && !cursor.isClosed())
cursor.close();
}
...
db.close();
你能帮我了解一下问题出在哪里吗?谢谢!
**更新!**我尝试了这个解决方案,从这个帖子SQLite连接泄漏,尽管一切都关闭了
而且我不再有内存泄漏,这是一个好的解决方案吗?
7条答案
按热度按时间2ledvvac1#
可能的解决方案:
not committed the transactions
(启动后应始终关闭交易)Sqlite
,请检查您是否已关闭已打开的游标(从您发布的代码看,您似乎已经完成了此步骤)db.close
移动到finally
块context.deleteDatabase(...)
删除数据库并使用dbHelper.getWritableDatabase()
重新创建它之前,您尚未在数据库上调用db.close
yx2lnoni2#
只需将
db.close
向上拖动到finally
块中。tsm1rwdh3#
xqk2d5yq4#
这段代码可以阻止泄漏并修复游标问题。
ctrmrzij5#
在我的例子中,错误是在尝试下载新数据时导致的,并且数据库应该更新。
我通过调用
SELECT 0
解决了示例化数据库的问题。这会导致数据库更新,因此在那之后我会尝试下载新数据。而且工作得很好。6psbrbz96#
可能您忘了去掉调试示例的断点:
b0zn9rqh7#
在我的例子中,我调用的是getWritableDatabase或getReadableDatabase,但根本不使用它。例如,如果您将其与“execSQL”一起使用,则execSQL将调用“relaseReference”“释放对对象的引用,如果最后一个引用被释放,则关闭该对象。”