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 продолжает работать, когда ваша активность приостановлена / уничтожена / конфигурация изменена... В этом случае будьте осторожны, у вас будет утечка памяти / объект активности равен нулю. Вы должны справиться самостоятельно.
В каждой ситуации существуют разные способы обращения и избегания. Но имейте в виду, выше поток для простого решения.