Задать вопрос

Asynctask или loader для сетевых запросов?

Что с точки зрения архитектуры приложения следует использовать для обращения к серверу? asynctask или loader ?

вот тут(в комментариях) , опытные разработчики ругают asynkTask для сетевых запросов.

Для каких задач asynkTask будет более привлекательным?
  • Вопрос задан
  • 1000 просмотров
Подписаться 4 Оценить Комментировать
Решения вопроса 1
@postflow Автор вопроса
Спасиб ребят!!!

p/s
Главное преимущество лоадера в том, что инициировать создание лоадера может одна активность, а получить результат уже совсем другая.

P p/s
Вот тут парни достаточно хорошо рассказали о плюсах и недостатках AsynT и Loader-ов + предложили хорошее решение https://www.youtube.com/watch?v=2PFUwLesuog&index=...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
TranE91
@TranE91
Senior Android Engineer
Retrofit + RxJava = масшатбируемость, удобство в саппорте и прочие плюшки. Как по мне, это лучшая спарка, на сегодняшний день, для работы в REST.

А по поводу AsyncTask, то эта приблуда, вроде уже устаревшей является, возможно вскоре ее пометят и выкосят.
Ответ написан
@IceJOKER
Web/Android developer
Уже несколько лет работаю с AsyncTask и проблем не наблюдаю, в начале пути были небольшие проблемы из-за того, что Activity завершал работу, а фоновая задача выполнялась и после выполнения крешил апп, но это были проблемы с кривости рук.
...
Для связи с активити использую listeners, да и в крайнем случае можно как внутренний класс его создать(чем я не балуюсь, по мне так лучше отдельный класс), для манипуляции присваиваю переменной на уровне активити(фрагмента) и при наступлении onStart/onStop останавливаю/запускаю задачу, и проблем с жизненным циклом хоста(Активити, Фрагмент...) не возникает

p.s. нужно запомнить, что после одного запуска задачи, его нужно заново создавать, поэтому при создании учтите это:
private AsyncTask task;
....
if(task == null || task.getStatus() == AsyncTask.STATUS_FINISHED) //можно/учитывать учитывать и другие состояния - PENDING, RUNNING.. это уже зависит от задачи
{
  task = new....;
}
task.execute();


ну или вам не нужен отклик, а нужно просто выполнить какую-то задачу(загрузка файла и т.д.), то просто запускаем задачу и забываем про него
Ответ написан
atetc
@atetc
Админ Android dev-s чата: https://goo.gl/8JKF1f
Главные минусы AsyncTask-ов:
- утечка памяти (хранит ссылку на контекст)
- у API не предусмотрена обработка ошибки
- нет привязки к жизненному циклу
- работа только с одним потоком, который не кастомизировать

Использовать можно, но только для простых коротких операций и очень аккуратно

В качестве достойной альтернативы уже больше года рекомендуется использовать RxJava + RxAndroid
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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