Как перейти от 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()
метод). Такая конструкция может упростить переход к многопанельным макетам, если вы когда-нибудь решите оптимизировать свое приложение для планшетов. Это тоже хороший опыт обучения:).
Это тоже довольно хороший урок. Постарайтесь пройтись по нему и не стесняйтесь оставлять комментарии, если у вас есть другие вопросы.