Недостатки андроида не закрывать курсор

У меня есть некоторые вопросы относительно Cursor.

Я хочу знать, каковы недостатки не закрытия Cursor?

Он освобождает ресурсы, но какие ресурсы освобождены?

Если мы не закрываем Cursor? Какими будут последствия и в какой степени?

Не закрывать Cursor не влияет на Activity немного, но он дает ошибку в log cat.

Ответы

Ответ 1

Закрытие Cursor предотвратит любые потенциальные утечки памяти, поэтому YES они всегда должны быть закрыты, когда они больше не используются.

Ответ 2

Курсор - это только интерфейс. Многое зависит от реализации, какого конкретного класса, который реализует этот интерфейс, который вы используете...

В случае SQLiteCursor существует немало вещей, которые нужно очистить (это от Froyo):

@Override
public void close() {
    super.close();
    deactivateCommon();
    mQuery.close();
    mDriver.cursorClosed();
}

Не закрывая курсор, данные все равно должны быть согласованы, но вы собираетесь утечка памяти...

Ответ 3

Я не думаю, что вы увидите много проблем, забывая закрыть один курсор. Проблема (и это относится практически к любой утечке памяти) заключается в том, что если вы продолжаете делать это снова и снова, в конечном итоге произойдет что-то плохое.

Например, я написал приложение, которое загружает данные с устройства SQLite DB на сервер. Если бы я не закрывал курсор каждый раз, когда я делал чтение и запись из базы данных, в конечном итоге я столкнулся с ошибками из-за памяти и различными другими проблемами.

Ответ 4

Если вы не закрываете курсор, тогда у вас будут проблемы с доступом к вашим данным в вашей базе данных, потому что, когда база данных открыта, она недоступна, если что-то происходит, например, действие приостановлено или иначе. В частности, эту проблему можно устранить, если вы позволите Управлению управлять ею.