Как перейти от managedQuery к LoaderManager/CursorLoader?

Я занимаюсь разработкой приложения для Android, ориентированного на уровень API 8 (2.2, Froyo). Я использую ContentProvider и это достаточно просто, и я использую SimpleCursorAdapter чтобы заполнить мой список, но я заметил в документации для SimpleCursorAdapter, что конструктор без флагов устарел со следующим примечанием:

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

Так как я ориентируюсь на уровень API 8, LoaderManager не привязан к Activity, FragmentActivity класс в пакете совместимости делает это, но я не использую фрагменты.

Мой вопрос: как именно я должен использовать LoaderManager/CursorLoader в приложении, ориентированном на уровень API до 11? Я вынужден перейти к фрагментам или я должен просто вернуться к устаревшим SimpleCursorAdapter конструктор (но использовать AsyncTask чтобы поддерживать дружественный пользовательский интерфейс, что CursorLoader должен делать)?

1 ответ

Решение

Редактировать:

Я написал достаточно подробно о LoaderManager в этом сообщении в блоге. Проверьте это и дайте мне знать, если это полезно!:)


Исходное сообщение:

Определенно, определенно, определенно идти с LoaderManager, CursorLoader Класс снимает с себя нагрузку по загрузке данных в потоке и сохраняет данные постоянными во время кратковременных событий обновления активности, таких как изменение ориентации. Помимо выполнения начального запроса, CursorLoader регистрирует ContentObserver с набором данных, который вы запросили, и звонками forceLoad() на себя, когда набор данных изменяется, и, таким образом, автоматически обновляется. Это очень удобно, так как вам не нужно беспокоиться о выполнении запросов самостоятельно. Конечно, можно использовать AsyncTask чтобы поддерживать поток пользовательского интерфейса вашего приложения, но он будет включать гораздо больше кода... и реализацию вашего класса, чтобы он, например, сохранял загруженный Cursor над Activity не будет простым Суть в том, что LoaderManager/Loader сделает это автоматически для вас, а также позаботится о правильном создании и закрытии Cursor на основе Activity жизненный цикл.

Использовать LoaderManager/CursorLoader в приложении, ориентированном на уровень API до 11, просто используйте FragmentActivity класс в пакете совместимости. FragmentActivity это просто Activity и был создан для поддержки совместимости Android, и не требует использования Fragment в вашем приложении. Просто используйте getSupportLoaderManager() вместо getLoaderManager() и у тебя все будет готово. Вы могли бы, конечно, реализовать родительский FragmentActivity для каждого экрана, и он отображает свой макет в Fragment (используя FragmentActivity.getSupportFragmentManager() в деятельности onCreate() метод). Такая конструкция может упростить переход к многопанельным макетам, если вы когда-нибудь решите оптимизировать свое приложение для планшетов. Это тоже хороший опыт обучения:).

Это тоже довольно хороший урок. Постарайтесь пройтись по нему и не стесняйтесь оставлять комментарии, если у вас есть другие вопросы.

Другие вопросы по тегам