Vyacheslav_Pochekutov
@Vyacheslav_Pochekutov

Минусы использования AsyncTask?

Всем привет! Я новичок в Android - разработке, поэтому прошу строго не судить) Я обучался на курсах и мы в большинстве случаев использовали Asynctask для асинхронных вызовов. Сейчас же, при устройстве на работу, меня часто спрашивают следующий вопрос - "Почему нельзя использовать Async-Task-и и что использовать вместо них?". Хотелось бы прояснить ситуацию. В первую очередь хотелось бы узнать у опытных разработчиков, что они используют? Что мне лучше изучать на данный момент? Всем спасибо)
  • Вопрос задан
  • 4839 просмотров
Пригласить эксперта
Ответы на вопрос 3
zagayevskiy
@zagayevskiy Куратор тега Android
Android developer at Yandex
Почему нельзя? Можно! Но только не всегда :)
АсинкТаски - для коротких асинхронный операций. Типичный пример - обращение к БД. Ни в коем случае не использовать для работы с сетью.
Почему:
1) АсинкТаски не привязаны к жизненному циклу активити. При пересоздании активити onPostExecute() выполнится, но активити будет не та (и она может утечь, что совсем не круто).
2) Следствие 1 - довольно хорошо заморочиться надо, чтобы написать правильный код с АсинкТасками. Такой код становится негибким и неудобным.
3) Без дополнительный усилий (executeOnExecutor) асинктаски ставятся в очередь и выполняются в отдельном потоке, но последовательно. Как следствие - тормоза UI там, где они используются правильно (например AsyncTaskLoader).
Ответ написан
@alvlapo
Подробно расписано в этой статье, не прибавить не убавить.
Ответ написан
SanchelliosProg
@SanchelliosProg
Java, Android, Software Testing
Минус в том, что если ты выполняешь в AsyncTask большой запрос, то в случае перехода на другой Activity, к примеру, GC может не уничтожить Activity, если таска не завершилась. Это приводит к утечкам памяти, и это плохо. Например, с сетью работая, лучше использовать EventBus (greenrobot), который начинает свою работу в отдельном потоке. Такие дела.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы