AsyncTask устарела теперь с AsyncTaskLoader?

Поскольку AsyncTaskLoader делает все AsyncTask может сделать, и дополнительно имеет встроенные функции передовой практики, такие как дублирование потоков и предотвращение преждевременной смерти.

Есть ли причина использовать AsyncTask больше? Или я должен просто слепо использовать AsyncTaskLoader везде

2 ответа

Решение

AsyncTaskLoader полезен только для загрузки данных в деятельности или фрагменте. AsyncTask более универсален и может выполнять любые фоновые операции в любом компоненте. Существуют альтернативы, такие как RxJava, HandlerThreads, простые потоки и т. Д., Но это, безусловно, не рекомендуется.

В 2017 году, когда был задан этот вопрос, AsyncTask все еще не считался устаревшим. Однако в Android 11 он устарел, так как AsyncTask требует множества проверок, чтобы избежать утечек памяти.

Совершить в проект Android АСОП имеет@deprecated уведомление:

@deprecated Использовать стандартный java.util.concurrent или утилиты параллелизма Kotlin.

  • Если у вас есть фоновое задание, которое нужно выполнить независимо от того, уничтожено действие или нет: Service или же IntentService какого-то механизма фоновой работы.
  • Если у вас есть фоновая работа, которую необходимо выполнить, и снова отправьте уведомление в пользовательский интерфейс: использование AsyncTaskLoader,
  • Если у вас есть фоновое задание, которое необходимо выполнить, и снова сообщите пользователю и продолжите выполнение, хотя действие уничтожено: использование AsyncTask потому что AsyncTask продолжает работать, когда ваша активность приостановлена ​​/ уничтожена / конфигурация изменена... В этом случае будьте осторожны, у вас будет утечка памяти / объект активности равен нулю. Вы должны справиться самостоятельно.

В каждой ситуации существуют разные способы обращения и избегания. Но имейте в виду, выше поток для простого решения.

Другие вопросы по тегам