gpt4 book ai didi

Android SQlite 泄漏问题与 CursorAdapter

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:26:13 25 4
gpt4 key购买 nike

我有一个 ListView 显示来自 sqlite 数据库的数据。我扩展了 CursorAdapter 来执行此操作。我的 ListActivity 中的以下代码有一个大问题:它将光标移交给 CursorAdapter

private boolean refreshListView() {
final boolean result;
SqliteHelper sqliteHelper = new SqliteHelper(this);
sqliteHelper.open();
final Cursor cursor = sqliteHelper.fetchAll();
if (cursor.getCount() == 0) {
//handling some stuff
} else {
startManagingCursor(cursor);
final MyCursorAdapter measures = new MyCursorAdapter(this, cursor);
setListAdapter(measures);
result = true;
}
return result;
}

我注意到这段代码导致频繁出现 IllegalStateExceptions “SQLiteDatabase created and never closed”。

我试图通过关闭数据库连接来解决这个问题。但是,如果我通过这种方法关闭它,我会得到 SQLiteMisuseException 我猜这是由于适配器仍在工作并且仍然需要游标引起的?

我还尝试通过 onPause() 关闭数据库。然而,这并不能解决泄漏问题。

我不想要会产生任何类型的内存或其他泄漏的应用程序。但我不知道我做错了什么。我没有在 ListActivityCursorAdapter 中找到任何回调或生命周期方法来提示我应该如何处理它。

如能提供有关如何解决此问题的任何提示,我将不胜感激。我开始怀疑整个结构是错误的。如果需要,我可以发布更多代码。

最佳答案

你应该在 onCreate() 中调用 sqliteHelper.open() 并在 onDestroy()< 中调用 sqliteHelper.close()/.

Activity Lifecycle详细解释生命周期。

关于Android SQlite 泄漏问题与 CursorAdapter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5225374/

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