ManagedQuery () vs context.getContentResolver.query () vs android.provider.something.query ()

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

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

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

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

Обновить:

managedQuery теперь устарел ( managedQuery с Android 3.0).

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

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