Какова цель startManagingCursor? - PullRequest
17 голосов
/ 01 июля 2011

Хорошо, в документации говорится, что она позволяет Activity управлять жизненным циклом курсора.Но на самом деле я не вижу в этом смысла, так как, когда действие уничтожается, любые ссылки на вновь созданный курсор также должны быть удалены, а затем сам курсор оставляется погибнуть в следующем цикле сбора мусора.Так зачем?

1 Ответ

33 голосов
/ 01 июля 2011

Вы не должны полагаться на уничтожение курсоров сборщиком мусора ... курсор представляет собой значительное количество ресурсов: все данные, удерживаемые курсором, плюс соединение с поставщиком содержимого, которому принадлежит курсор, что также означаеттребуя, чтобы его процесс хранился в памяти.

В более поздних версиях Android сообщения журнала выводятся на печать, если финализатор курсора работает без явного закрытия, потому что для приложений важно закрывать курсоры, когда они с ними работают.

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

Тосказал, что на данный момент вы должны рассматривать управляемые курсоры как устаревшие.Новый API Loader намного лучше и имеет много улучшений в пользовательском интерфейсе вашего приложения - он гарантирует, что все операции курсора выполняются из основного потока (чтобы не было сбоев во взаимодействиях и анимациях вашего пользовательского интерфейса), и можетраспространять существующие данные курсора по экземплярам действия, когда действие перезапускается из-за изменения конфигурации вместо необходимости перезагружать данные.

Если вам нужно работать на более старых версиях Android, чем 3.0, вы можете использовать поддержку v4реализация библиотеки Loader для этих приложений.

...