【发布时间】:2011-05-06 14:48:45
【问题描述】:
我有一个应用程序,它使用光标通过rawQuery 从 SQLite DB 中选择数据以填充 Android 中的 ListView。每次用户单击列表视图项时,我都会创建一个新的 Activity 实例来重新填充列表视图。
调用cursor.close() 和db.close() 来避免内存问题会更好吗?我实际上在我的活动的OnDestroy() 中有db.close()。
【问题讨论】:
我有一个应用程序,它使用光标通过rawQuery 从 SQLite DB 中选择数据以填充 Android 中的 ListView。每次用户单击列表视图项时,我都会创建一个新的 Activity 实例来重新填充列表视图。
调用cursor.close() 和db.close() 来避免内存问题会更好吗?我实际上在我的活动的OnDestroy() 中有db.close()。
【问题讨论】:
在您的方法中检索到该特定对象的值后,您可以关闭cursor。
顺便说一句...您不必每次都为用户单击事件重新创建listview。只需通知列表视图上设置的适配器数据发生了一些变化。
类似
youradaptername.notifyDataSetChanged();
这应该会自动重新填充你的 listview 中的内容。
【讨论】:
如果您每次都为同一个 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 ...
【讨论】: