作为学习android的一部分,我正在关注NotePad tutorial
我在教程中注意到的一件事是,数据库连接未被显式关闭,因为startManagingCursor()自己处理它,所以它是有意义的。
但是如果以快速的方式启动/停止应用程序(我通过点击它的图标手动启动应用程序并通过按回来关闭它)我发现数据库没有关闭&生成以下错误:
08-23 18:11:55.637: WARN/SQLiteCompiledSql(10784): Releasing statement in a finalizer. Please ensure that you explicitly call close() on your cursor: SELECT _id, title, body FROM notes
08-23 18:11:55.637: WARN/SQLiteCompiledSql(10784): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
在onDestroy中显式关闭数据库连接解决了这个问题,但我想这不应该发生。可以吗?
答案 0 :(得分:0)
我认为这是一个无效的问题,因为它涉及两个不同的概念。 Cursor和SQLiteOpenHelper实例不同,应分别关闭。当我们使用startManagingCursor()时,游标实例被关闭但我们需要手动关闭我在onDestroy()中执行的SQLiteOpenHelper实例。
我通过不关闭SQLiteOpenHelper实例测试了这一点,并使用startManagingCursor()来验证错误,我得到了它。即使关闭SQLiteOpenHelper实例而不关闭游标实例(如果您没有使用startManagingCursor())也可能导致此错误。