Так как Honeycomb
и v4 Compatibility Library
можно использоватьAsyncTaskLoader
. Насколько я понимаю, они AsyncTaskLoader
могут пережить изменения конфигурации, такие как переворачивание экрана.
Рекомендуется использовать AsyncTaskLoader
вместо AsyncTask
? Имеет лиLoaderManager
тоже в кадр?
Но я не нашел хороших примеров того, как правильно использовать AsyncTaskLoader
. В документации также нет примеров. Может ли кто-нибудь привести хорошие примеры.
AsyncTaskLoader
, и когда больше разработчиков начнут использовать его, появятся новые примеры.При сравнении AsyncTaskLoader и AsyncTask , как вы, возможно, знаете, когда вы поворачиваете экран устройства, он может разрушить и воссоздать вашу активность, чтобы было ясно, пусть изображение поворачивает ваше устройство во время сетевой транзакции:
AsyncTask снова будет выполняться как фоновый поток, а предыдущая обработка фонового потока была просто избыточной и зомбированной.
AsyncTaskLoader будет просто повторно использоваться на основе идентификатора загрузчика, который был зарегистрирован в диспетчере загрузчиков ранее, поэтому избегайте повторного выполнения сетевой транзакции.
Таким образом, AsyncTaskLoader предотвращает дублирование фоновых потоков и устраняет дублирование действий зомби.
источник
AsyncTaskLoader выполняет ту же функцию, что и AsyncTask , но немного лучше. Он может легче обрабатывать изменения конфигурации действий и ведет себя в рамках жизненных циклов фрагментов и действий. Приятно то, что AsyncTaskLoader можно использовать в любой ситуации, когда используется AsyncTask. В любое время, когда данные должны быть загружены в память для обработки Activity / Fragment, AsyncTaskLoader может выполнять эту работу лучше.
Однако есть несколько проблем с использованием AsyncTasks:
Документ AsyncTaskLoader
источник
Некоторые отличия, кроме описанных в других ответах:
При использовании AsyncTaskLoader поверх AsyncTask :
AsyncTaskLoader дает нам возможность загружать старые кэшированные данные до тех пор, пока новые данные не будут возвращены
forceLoad()
Мы можем установить задержки для AsyncTaskLoader, с помощью
setUpdateThrottle()
которых можно предотвратить последовательные обновления клиента (Activity / Fragment)AsyncTaskLoader можно использовать для нескольких фрагментов, если у них есть общая родительская активность и если она была запущена из
getActivity().getSupportLoaderManager()
AsyncTaskLoader уничтожается,
LoaderManger
когда связанная с ним активность становится недоступной. в то время как нам нужно вручную уничтожить AsyncTasks, если его вызывающая активность разрушается. Это экономит наше время от написания всей очистки. AsyncTaskLoader хорошо работает с соответствующими жизненными циклами.Итак, AsyncTaskLoader намного лучше, чем AsyncTask.
источник