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