managedQuery () против context.getContentResolver.query () против android.provider.something.query () - PullRequest
46 голосов
/ 07 апреля 2010

Довольно просто. В чем разница между этими тремя?

Я хочу перечислить каждое изображение на устройстве. Должен ли я использовать managedQuery(), android.provider.MediaStore.Images.Media.query() или context.getContentResolver.query()

Ответы [ 2 ]

72 голосов
/ 07 апреля 2010

managedQuery() будет использовать запрос ContentResolver (). Разница в том, что при managedQuery() активность сохранит ссылку на ваш Курсор и закройте его, когда это необходимо (например, в onDestroy()). Если вы query() сами, вам придется управлять курсором как чувствительный ресурс. Если вы забудете, например, close() это в onDestroy(), вы утечете базовые ресурсы (logcat предупредит вас об этом.)

Чтобы запросить контент-провайдера, вы можете использовать либо метод ContentResolver.query(), либо метод Activity.managedQuery(). Оба метода принимают один и тот же набор аргументов, и оба возвращают объект Cursor. Однако managedQuery() заставляет действие управлять жизненным циклом Курсора. Управляемый курсор обрабатывает все тонкости, такие как выгрузка себя, когда действие приостанавливается, и запрос себя при возобновлении действия. Вы можете попросить Activity начать управлять неуправляемым объектом Cursor, позвонив по номеру Activity.startManagingCursor().

Обновление:

managedQuery устарела (начиная с Android 3.0).

23 голосов
/ 05 октября 2011

managedQuery (..) теперь устарело (начиная с Android 3.0).Осторожно ..

Ошибка Android: java.lang.IllegalStateException: попытка запросить уже закрытый курсор

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...