Подтвердить что ты не робот

Используя OKHttp, в чем разница между синхронным запросом в AsyncTask и OKhttp Asynchronous request?

OKHttp поддерживает как синхронный, так и асинхронный api. Если я хочу выдать запрос async, я могу:

  • Используйте AsyncTask и выполните синхронный аффилированный протокол OKhttp.
  • Выполните асинхронный афикс OKhttp.

В чем разница между этими двумя вариантами? И какой из них лучше?

4b9b3361

Ответ 1

Довольно много отличается!

Использование AsyncTask для HTTP-запросов в значительной степени является одной из худших вещей, которые вы можете сделать на Android. Это чревато проблемами и ошибками, которые безоговорочно избегают. Например, вы не можете отменить запрос во время выполнения. Шаблоны использования AsyncTask также обычно утечка ссылки на Activity, кардинальный грех развития Android.

OkHttp async значительно превосходит по многим причинам:

  • Он поддерживает собственное отмена. Если запрос находится в полете, ссылка на Callback освобождается и никогда не будет вызвана. Кроме того, если запрос еще не запущен, он никогда не будет выполнен. Если вы используете HTTP/2 или SPDY, мы можем фактически отменить среднюю пропускную способность и мощность.
  • Он поддерживает тегирование нескольких запросов и отмену их всех одним вызовом метода. Это означает, что каждый запрос, который вы делаете, например, Activity, может быть помечен экземпляром Activity. Затем в onPause или onStop вы можете отменить все запросы, помеченные тегом Activity.
  • Если вы используете HTTP/2 или SPDY-запросы, а ответы мультиплексируются по одному соединению с удаленным сервером и с помощью асинхронного механизма Call это намного эффективнее, чем блокирующая версия.

Итак, если вы можете, используйте Call.enqueue!

Ответ 2

Ничего особенного. OKHttp async - это API-интерфейс OKHttp. Поэтому, пока вы объединяете банки для всех платформ, вы должны быть хорошими. AsyncTask - это способ Android.

Однако, поскольку задача Honeycomb Async выполняет задачи последовательно, а не параллельно. Это означает, что, хотя метод execute AsyncTask охватывает новый поток, который откладывает вашу работу от потока пользовательского интерфейса, но все задачи, отправленные в один сеанс AsyncTask, выполняются в одном и том же потоке.

Итак, для 3 заданных задач u не получаю 3 потока, они все работают последовательно на одном натянутом потоке. С помощью OKHttp вы можете достичь истинного parallelism с помощью обратных вызовов и асинхронных GET и POST.

Хотя вы также можете сделать true parallelism в методах AsyncTask (проверьте перегруженные методы выполнения в AsyncTask), но поведение по умолчанию Android не должно делать этого.