android - tutorial - Con OKHttp, ¿cuál es la diferencia entre la solicitud síncrona en AsyncTask y la solicitud asíncrona OKhttp?
retrofit vs volley español (2)
OKHttp soporta tanto api síncrono como asíncrono . Si quiero emitir una solicitud asíncrona, puedo:
- Use una AsyncTask, y emita la api sincrónica OKhttp.
- Emita una api asíncrona de OKhttp.
¿Cuál es la diferencia entre estas 2 opciones? y cuál es mejor?
¡Mucho difiere!
Usar AsyncTask
para solicitudes HTTP es una de las peores cosas que puedes hacer en Android. Está lleno de problemas y errores que se evitan incondicionalmente. Por ejemplo, no puede cancelar una solicitud durante la ejecución. Los patrones de uso de AsyncTask
también suelen filtrar una referencia a una Activity
, un pecado AsyncTask
del desarrollo de Android.
El async de OkHttp es muy superior por muchas razones:
- Es compatible con la cancelación nativa. Si una solicitud está en vuelo, la referencia a la
Callback
se libera y nunca se llamará. Además, si la solicitud aún no se ha iniciado, nunca se ejecutará. Si está utilizando HTTP / 2 o SPDY, podemos cancelar el ancho de banda y la energía de la mitad de la solicitud. - Admite etiquetar solicitudes múltiples y cancelarlas todas con una sola llamada de método. Esto significa que cada solicitud que realice en, digamos, una
Activity
se puede etiquetar con la instancia deActivity
. Luego, enonPause
uonStop
puede cancelar todas las solicitudes etiquetadas con la instancia deActivity
. - Si está utilizando HTTP / 2 o SPDY, las solicitudes y respuestas se multiplexan a través de una sola conexión al servidor remoto y al usar el mecanismo de
Call
asíncrono es mucho más eficiente que la versión de bloqueo.
Así que si puedes, usa Call.enqueue
!
No mucho. OKHttp async es OKHttp API impulsado. Entonces, siempre que juntes los frascos para todas las plataformas, deberías ser bueno. AsyncTask es la forma Android de hacer las cosas.
Sin embargo, ya que Honeycomb Async Task ejecuta las tareas de forma secuencial y no en paralelo. Esto significa que, aunque el método de ejecución de AsyncTask abarca un nuevo hilo que ejecuta su trabajo desde el hilo de la interfaz de usuario, todas las tareas enviadas a un AsyncTask se ejecutan en el mismo hilo.
Por lo tanto, para 3 tareas enviadas, no se obtienen 3 subprocesos, todos se ejecutan de forma secuencial en un único subproceso distribuido. Con OKHttp puede lograr un verdadero paralelismo utilizando devoluciones de llamada y asíncronos GET y POST.
Aunque también puede hacer un verdadero paralelismo en los métodos AsyncTask (verifique los métodos de ejecución sobrecargados en AsyncTask), pero el comportamiento predeterminado de Android no es hacerlo.