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 снова начали использовать единственный тред.Такие изменения вызывали путаницу и баги в приложениях.