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