AsyncTaskLoader vs AsyncTask


129

Так Honeycombі v4 Compatibility Libraryйого можна використовувати AsyncTaskLoader. З того, що я розумію, AsyncTaskLoaderможе змінитися через зміни конфігурації, як перекидання екрана.

Чи рекомендується використовувати AsyncTaskLoaderзамість AsyncTask? Чи LoaderManagerпотрапляє на малюнок теж?

Але я не знайшов жодного хорошого прикладу щодо правильного використання AsyncTaskLoader. Документи також не надають прикладів. Хтось може надати кілька хороших прикладів.

Відповіді:


51

Ви можете подивитися вихідний код бібліотеки сумісності, щоб отримати більше інформації. Що FragmentActivityтаке:

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

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

Як правило, це має бути простіше, ніж керувати AsyncTaskсобою. Однак AsyncTaskLoaderце не дуже добре зафіксовано, тому слід вивчити приклад у документах та / або моделювати свій код після CursorLoader.


5
Я буду дивитись на це. Можливо, рано знайти хороші приклади AsyncTaskLoader, і коли більше розробників почнуть його використовувати, з’явиться більше прикладів.
ОКА

47

Коли порівнювати AsyncTaskLoader проти AsyncTask , як ви знаєте , коли ви повертаєте екран пристрою, воно може знищити і заново створити свою діяльність, щоб було ясно , нехай зображення повернути пристрій під час мережевих транзакцій відбуваються:

AsyncTask буде знову виконано як фонова нитка, і попередня обробка фонових ниток була просто зайвою і зомбі.

AsyncTaskLoader буде просто повторно використаний на основі ідентифікатора навантажувача, який раніше був зареєстрований у диспетчері завантажувачів, тому уникайте повторного здійснення мережевої транзакції.

Підсумовуючи, AsyncTaskLoader запобігає дублюванню фонових ниток та усуває дублювання зомбі-діяльності.


11

AsyncTaskLoader виконує ту ж функцію, що і AsyncTask , але трохи краще. Він може легше керувати змінами конфігурації діяльності, і вона поводиться в межах життєвих циклів фрагментів та діяльності. Приємно те, що AsyncTaskLoader можна використовувати в будь-якій ситуації, в якій використовується AsyncTask. Будь-який час потрібно завантажувати в пам'ять, щоб активність / фрагмент обробляти, AsyncTaskLoader може зробити цю роботу краще.

Однак існує декілька проблем із використанням AsyncTasks:

  • Зміни конфігурації можуть зіпсувати речі
  • Призупинення дії не призупиняє AsyncTask
  • Справедлива кількість кодового коду (що означає більше можливих помилок)

Документ AsyncTaskLoader


8

Деякі відмінності, ніж описано в інших відповідях:

Під час використання AsyncTaskLoader через AsyncTask :

  • AsyncTaskLoader дає нам можливість завантажувати старі кешовані дані до повернення нових данихforceLoad()

  • Ми можемо встановити затримки до AsyncTaskLoader, завдяки setUpdateThrottle()чому можна запобігти послідовним оновленням клієнта (Діяльність / Фрагмент)

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

  • AsyncTaskLoader знищується, LoaderMangerколи пов'язана з ним діяльність більше недоступна. тоді як нам потрібно вручну знищити AsyncTasks, якщо його активність викликає руйнування . Це економить наш час від написання всіх очисних матеріалів. AsyncTaskLoader добре грає з відповідними життєвими циклами.

Отже, AsyncTaskLoader набагато кращий, ніж AsyncTask.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.