лучше его не использовать. На собеседовании могут спросить, почему это так.
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 снова начали использовать единственный тред.
Такие изменения вызывали путаницу и баги в приложениях.
#OS
2 пункт абсолютно не понятен. Кто тогда должен получить коллбэк с результатом?)
пункт №4 устарел
Обсуждают сегодня