Ответ 1
Закрытие Cursor
предотвратит любые потенциальные утечки памяти, поэтому YES они всегда должны быть закрыты, когда они больше не используются.
У меня есть некоторые вопросы относительно Cursor
.
Я хочу знать, каковы недостатки не закрытия Cursor
?
Он освобождает ресурсы, но какие ресурсы освобождены?
Если мы не закрываем Cursor
? Какими будут последствия и в какой степени?
Не закрывать Cursor
не влияет на Activity
немного, но он дает ошибку в log cat.
Закрытие Cursor
предотвратит любые потенциальные утечки памяти, поэтому YES они всегда должны быть закрыты, когда они больше не используются.
Курсор - это только интерфейс. Многое зависит от реализации, какого конкретного класса, который реализует этот интерфейс, который вы используете...
В случае SQLiteCursor существует немало вещей, которые нужно очистить (это от Froyo):
@Override
public void close() {
super.close();
deactivateCommon();
mQuery.close();
mDriver.cursorClosed();
}
Не закрывая курсор, данные все равно должны быть согласованы, но вы собираетесь утечка памяти...
Я не думаю, что вы увидите много проблем, забывая закрыть один курсор. Проблема (и это относится практически к любой утечке памяти) заключается в том, что если вы продолжаете делать это снова и снова, в конечном итоге произойдет что-то плохое.
Например, я написал приложение, которое загружает данные с устройства SQLite DB на сервер. Если бы я не закрывал курсор каждый раз, когда я делал чтение и запись из базы данных, в конечном итоге я столкнулся с ошибками из-за памяти и различными другими проблемами.
Если вы не закрываете курсор, тогда у вас будут проблемы с доступом к вашим данным в вашей базе данных, потому что, когда база данных открыта, она недоступна, если что-то происходит, например, действие приостановлено или иначе. В частности, эту проблему можно устранить, если вы позволите Управлению управлять ею.