2014-12-07 17 views

risposta

55

Molto diverso!

L'utilizzo di AsyncTask per le richieste HTTP è praticamente una delle peggiori cose che puoi fare su Android. È pieno di problemi e trucchi che è meglio evitare incondizionatamente. Ad esempio, non è possibile annullare una richiesta durante l'esecuzione. I modelli di utilizzo di AsyncTask inviano anche comunemente un riferimento a uno Activity, un peccato capitale dello sviluppo Android. async

di OkHttp è enormemente superiore per molte ragioni:

  • Supporta cancellazione nativo. Se una richiesta è in volo, il riferimento allo Callback viene liberato e non verrà mai chiamato. Inoltre, se la richiesta non è ancora iniziata, non verrà mai eseguita. Se si utilizza HTTP/2 o SPDY, è possibile annullare la richiesta a metà, risparmiando larghezza di banda e alimentazione.
  • Supporta la codifica di più richieste e la cancellazione di tutte con una singola chiamata di metodo. Ciò significa che ogni richiesta effettuata, ad esempio, Activity può essere contrassegnata con l'istanza Activity. Quindi in o onStop è possibile annullare tutte le richieste contrassegnate con l'istanza Activity.
  • Se si utilizzano richieste HTTP/2 o SPDY e le risposte vengono multiplexate su una singola connessione al server remoto e utilizzando il meccanismo asincrono Call questo è molto più efficiente della versione di blocco.

Quindi, se è possibile, utilizzare Call.enqueue!

1

Niente. OKHttp async è guidato da API OKHttp. Quindi, se impacchettate i vasi insieme per tutte le piattaforme dovreste essere bravi. AsyncTask è un modo Android di fare le cose.

Tuttavia, poiché l'attività Honeycomb Async esegue i task in modo sequenziale e non in parallelo. Ciò significa che sebbene il metodo di esecuzione di AsyncTask si estenda su un nuovo thread che esegue il tuo lavoro lontano dal thread dell'interfaccia utente, ma tutte le attività inviate ad un AsyncTask vengono eseguite nello stesso thread con spanning.

Quindi per 3 attività inviate non si ottengono 3 thread che vengono eseguiti in sequenza su un singolo thread con spanning. Con OKHttp puoi raggiungere il vero parallelismo usando i callback e gli asincroni GET e POST.

Anche se è possibile eseguire il vero parallelismo nei metodi AsyncTask (controllare i metodi di esecuzione in overload in AsyncTask), ma il comportamento predefinito di Android non è quello di farlo.

Problemi correlati