У меня есть приложение, которое использует курсор для выбора данных через rawQuery из sqlite db для заполнения ListView на Android;. Каждый раз, когда пользователь нажимает на элемент listview, я создаю новый экземпляр Activity для повторного заполнения listview. Лучше ли звонить cursor.close()
и db.close()
, чтобы избежать проблем с памятью? На самом деле у меня db.close()
в OnDestroy()
моей активности.
Когда закрыть курсор в Android?
Ответ 1
Вы можете закрыть cursor
после того, как вы извлекли значения для этого конкретного объекта внутри вашего метода.
btw... Вам не нужно воссоздавать listview
каждый раз для события клика пользователя. Просто сообщите, что есть некоторые изменения в данных вашего адаптера, которые были установлены в списке.
Что-то вроде
youradaptername.notifyDataSetChanged();
Это должно автоматически обновлять содержимое внутри ur listview
.
Ответ 2
Хорошо, если вы создаете новый экземпляр каждый раз из того же самого действия (хотя я не уверен, что это хорошая практика программирования). Вы можете закрыть курсор, как только вы закончите пересечение/итерацию через источник списка.
Пример:
Пример реализации будет чем-то вроде
//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 ...