gpt4 book ai didi

android - 在 Android 的连续 Activity 中使用相同的数据库而不会发生内存泄漏

转载 作者:行者123 更新时间:2023-11-30 04:40:00 28 4
gpt4 key购买 nike

我将在这个问题前加上我看过 this similar question 的注释,但我仍然遇到问题。基本上,我想在我的 Android 应用程序的两个 Activity 中访问同一个数据库。但是,当我在第二个 Activity 中打开它时,我在 LogCat 中收到了两个系列的消息:

首先:

"Uncaught exception thrown by finalizer (will be discarded):
Ljava/lang/IllegalStateException;: Finalizing cursor android.database.sqlite.SQLiteCursor@436053b8 on dogs that has not been deactivated or closed
at android.database.sqlite.SQLiteCursor.finalize(SQLiteCursor.java:596)"

(dogs是我数据库中的一个表的名字,dog_data)

第二个:

"ERROR/Database(1316): Leak found
ERROR/Database(1316): java.lang.IllegalStateException: /data/data/com..../databases/dog_data SQLiteDatabase created and never closed"

据我所知,我正在在退出第一个 Activity 时关闭我的数据库。按照记事本教程的风格,我在 SQLiteDatabase 周围有一个包装器类“DbAdapter”,在第一个 Activity 的 onPause() 方法中,我调用了该适配器上的关闭方法(它调用了我的 SQLiteDatabase 上的关闭方法和我的 SQLiteOpenHelper)。

我认为问题在于我在第二个 Activity 中尝试重新打开数据库的方式:

SQLiteDatabase db = openOrCreateDatabase("dog_data", 
SQLiteDatabase.CREATE_IF_NECESSARY, null);

(我选择不使用包装器,因为我只需要在数据库上运行一个查询,也许这是一个问题)。

有人可以告诉我我的问题可能出在哪里吗?我承认(从我的问题中可以清楚地看出)我不完全理解“关闭”数据库的含义(SQLiteDatabase.close() 的文档不是特别具体),这可能是主要原因我的问题。

谢谢。

最佳答案

以防万一有人碰巧遇到类似的问题(似乎有可能但不太可能),我最近偶然发现了解决方案。在我的“DbAdapter”的插入方法中,我(愚蠢地)通过查询对其中一个字段具有给定值的行来检查唯一性,并查看该查询是否返回任何行。这创建了一个我没有关闭的游标,这导致了上面提到的“Finalizing cursor”错误。

关于android - 在 Android 的连续 Activity 中使用相同的数据库而不会发生内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6155306/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com