AsyncTaskLoader vs AsyncTask



С Honeycomb и v4 Compatibility Library можно использовать AsyncTaskLoader. Из того, что я понимаю, то AsyncTaskLoader может выжить через изменения конфигурации, как экран переворачивается.

рекомендуется использовать AsyncTaskLoader вместо AsyncTask? Делает LoaderManager получить в картине тоже?

но я не нашел ни одного хорошего примера(ов) о том, как правильно использовать AsyncTaskLoader. В документах также нет примеров. Может ли кто-нибудь привести несколько хороших примеров.

207   4  

4 ответов:

вы можете взглянуть на исходный код библиотеки совместимости, чтобы получить больше информации. Что за FragmentActivity Это:

  • сохранить список LoaderManager ' s
  • убедитесь, что они не разрушаются, когда вы переворачиваете свой телефон (или происходит другое изменение конфигурации), сохраняя экземпляры с помощью onRetainNonConfigurationInstance()
  • удар правой загрузчик, когда вы звоните initLoader() в работе

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

вообще это должно быть проще, чем управлять AsyncTaskЭто ты сам. Однако,AsyncTaskLoader не совсем хорошо документирован, поэтому вы должны изучить пример в документах и / или смоделировать свой код после CursorLoader.

Для сравнения AsyncTaskLoader и AsyncTask, Как вы можете знать, когда вы поворачиваете экран устройства, он может уничтожить и воссоздать вашу деятельность, чтобы сделать его ясным пусть изображение повернуть устройство во время сетевой транзакции происходит:

AsyncTask будет повторно выполнен как фоновый поток снова, и предыдущая обработка фонового потока была просто избыточной и зомби.

AsyncTaskLoader будет просто повторно используется на основе идентификатора загрузчика, который ранее был зарегистрирован в Диспетчере загрузчиков, поэтому избегайте повторного выполнения сетевой транзакции.

в целом, AsyncTaskLoader предотвратить дублирование фоновых потоков и устранить дублирование деятельности зомби.

AsyncTaskLoader выполняет ту же функцию, что и AsyncTask, но немного лучше. Он может обрабатывать изменения конфигурации активности более легко, и он ведет себя в течение жизненного цикла фрагментов и деятельности. Хорошая вещь заключается в том, что AsyncTaskLoader может использоваться в любой ситуации, в которой используется AsyncTask. В любое время данные должны быть загружены в память для деятельности/фрагмента для обработки, AsyncTaskLoader может сделать работу лучше.

там есть несколько проблем с использованием AsyncTasks, хотя:

  • изменения конфигурации могут все испортить
  • приостановка действия не приостанавливает AsyncTask
  • изрядное количество boilerplate кода (что означает больше возможных ошибок)

AsyncTaskLoader док

некоторые различия, отличные от описанных в других ответах:

при использовании AsyncTaskLoader over AsyncTask:

  • AsyncTaskLoader дает нам свободу загружать старые кэшированные данные, пока новые данные не будут возвращены forceLoad()

  • мы можем установить задержек AsyncTaskLoader by setUpdateThrottle() что может предотвратить последовательные обновления клиента (Активность / Фрагмент)

  • AsyncTaskLoader можно разделить на несколько фрагментов, если они имеют общую родительскую активность и если она была запущена из getActivity().getSupportLoaderManager()

  • AsyncTaskLoader уничтожил LoaderManger когда его связанная активность больше не доступна. пока нам нужно вручную уничтожить AsyncTasks если его активность вызывающего уничтожает. Это экономит наше время от написания всего клирингового материала. AsyncTaskLoader хорошо играет с их жизненным циклом.

Итак, AsyncTaskLoader намного лучше, чем AsyncTask.

    Ничего не найдено.

Добавить ответ:
Отменить.