32

我有一个应用程序,它使用光标rawQuery从 SQLite DB 中选择数据以填充 Android 中的 ListView。每次用户单击列表视图项时,我都会创建一个新的 Activity 实例来重新填充列表视图。

调用cursor.close()db.close()避免内存问题更好吗?我实际上db.close()参与OnDestroy()了我的活动。

4

2 回答 2

21

cursor一旦您在方法中检索到该特定对象的值,您就可以关闭它。

顺便说一句...您不必listview每次都为用户单击事件重新创建。只需通知列表视图上设置的适配器数据发生了一些变化。

就像是

youradaptername.notifyDataSetChanged();

这应该会自动重新填充 ur 中的内容listview

于 2010-11-08T11:56:11.500 回答
6

好吧,如果您每次都为同一个 Activity 创建一个新实例(尽管我不确定它是否是一个好的编程习惯)。完成遍历/迭代列表视图的源后,您可以关闭光标。

例子:

示例实现将类似于

//Pre cursor code
startManagingCursor(cursor);
if (cursor.moveToFirst()) {
    do {
        if (cursor.getString(0).equals(value)) {
            cursor.close();
            a = true;
            return a;
        }
    } while (cursor.moveToNext());
}

//Close cursor here, when its work is complete
cursor.close();

//Post cursor code ...
于 2010-11-08T11:57:03.917 回答