AsyncTaskLoader vs AsyncTask
Так как Honeycomb
и v4 Compatibility Library
можно использовать AsyncTaskLoader
. Насколько я понимаю, AsyncTaskLoader
может выжить через изменения конфигурации, такие как переходы экрана.
Рекомендуется ли использовать AsyncTaskLoader
вместо AsyncTask
? Входит ли LoaderManager
в изображение?
Но я не нашел хороших примеров того, как правильно использовать AsyncTaskLoader
. В документах также нет примеров. Может ли кто-нибудь предоставить хорошие примеры.
Ответы
Ответ 1
Вы можете посмотреть исходный код библиотеки совместимости, чтобы получить дополнительную информацию. Что делает FragmentActivity
:
- сохранить список
LoaderManager
- убедитесь, что они не уничтожаются, когда вы переворачиваете свой телефон (или другое изменение конфигурации), сохраняя экземпляры с помощью
onRetainNonConfigurationInstance()
- удалите правого загрузчика, когда вы вызываете
initLoader()
в своей деятельности
Вам необходимо использовать интерфейс LoaderManager
для взаимодействия с загрузчиками и предоставить необходимые обратные вызовы для создания вашего загрузчика (-ов) и заполнить ваши представления данными, которые они возвращают.
Как правило, это должно быть проще, чем управлять AsyncTask
самостоятельно. Однако AsyncTaskLoader
не совсем хорошо документирован, поэтому вы должны изучить пример в документах и /или моделировать свой код после CursorLoader
.
Ответ 2
При сравнении AsyncTaskLoader и AsyncTask, как вы можете знать, когда вы поворачиваете экран своего устройства, он может уничтожать и воссоздавать вашу активность, чтобы было ясно, что изображение вращает ваше устройство во время сетевой транзакции:
AsyncTask будет снова выполняться как фоновый поток, а предыдущая обработка фоновых потоков была просто избыточной и зомби.
AsyncTaskLoader будет просто повторно использоваться на основе идентификатора загрузчика, который ранее был зарегистрирован в диспетчере загрузчика, поэтому избегайте повторного выполнения сетевой транзакции.
Таким образом, AsyncTaskLoader предотвращает дублирование фоновых потоков и устраняет дублирование активности зомби.
Ответ 3
AsyncTaskLoader выполняет ту же функцию, что и AsyncTask, но немного лучше. Он легче справляется с изменениями конфигурации деятельности и ведет себя в жизненных циклах фрагментов и действий. Приятно, что AsyncTaskLoader можно использовать в любой ситуации, в которой используется AsyncTask. В любое время данные должны быть загружены в память для Activity/Fragment для обработки, AsyncTaskLoader может сделать работу лучше.
Есть несколько проблем с использованием AsyncTasks:
- Изменения конфигурации могут повредить вещи
- Приостановка активности не приостанавливает работу AsyncTask
- Справедливое количество кода шаблона (что означает более возможные ошибки)
Документ AsyncTaskLoader