AsyncTask
– это плохо и лучше его не использовать. На собеседовании могут спросить, почему это так.1. Для того, чтобы использовать AsyncTask, нужно создать наследника этого класса. Использование через наследование требует написание бойлерплейт кода и не является гибким механизмом.
2.
AsyncTask
нарушает принцип единственной ответственности, т.к. выступает и классом, который выполняет бэкграунд задачу, и коллбэком, получающим результат.3. Неудачный API. Часто работа с бэкграунд тредом в андроид-приложениях – это запрос в сеть или базу данных. Для обработки результата достаточно методов
onSuccess()
и onError()
. AsyncTask
предоставляет обычно ненужные коллбэки onPreExecute()
и onProgressUpdate()
, а также метод onPostExecute()
, который вызывается в случаях и успешного выполнения, и ошибки. Это требует писать больше бойлерплейта.4. На разных версиях андроида выполнение нескольких
AsyncTask
реализовано по-разному:• До
Api level 4
использовался единственный тред и все AsyncTask
выполнялись по очереди.• Начиная с
Api level 4
и до 11
использовался тред пул и AsyncTask
выполнялись параллельно.• Начиная с
Api level 11
снова начали использовать единственный тред.Такие изменения вызывали путаницу и баги в приложениях.