2015-11-14 40 views
11

Sto utilizzando la libreria Retrofit 2 per un client REST Android. Il retrofit stesso supporta la richiesta sincrona e asincrona (vedi here), il motivo per cui quest'ultimo non deve bloccare un thread e quindi non essere interrotto da Android.Retrofit 2 best practice per Android: richiesta asincrona o richiesta sincrona in AsyncTask?

In pratica, è meglio utilizzare le chiamate sincrone in una rete nativa AsyncTask o chiamate asincrone direttamente da Retrofit? Se uno è preferibile rispetto all'altro, quali sono le ragioni tecniche?

risposta

20

Uno dei motivi principali per utilizzare qualsiasi dei client REST (retrofit, pallavolo, ecc.) È che riducono la quantità di dettagli gestita a livello di applicazione. Uno di questi dettagli è assicurarsi che le richieste di rete avvengano fuori dal thread principale. Perché si dovrebbe usare uno AsyncTask quando una libreria che già stanno utilizzando per altre funzionalità fornisce la stessa funzionalità con meno cerimonie? L'unica ragione per cui posso pensare è - non pensi che il threading della biblioteca sia molto buono. Tale preoccupazione non si applica al retrofit 2, utilizza OkHttp per inviare chiamate asincrone. OkHttp è in uso da un po 'e ampiamente utilizzato, gestisce il proprio pool di thread per eseguire richieste asincrone ed è solido.

Quindi, l'aspetto positivo dell'utilizzo di aggiornamento asincrono è un codice più pulito, e non esiste uno svantaggio rispetto a AsyncTask con le chiamate di sincronizzazione di aggiornamento. L'unica volta che utilizzo le chiamate di sincronizzazione è quando il mio codice è già in esecuzione in un thread in background per un altro motivo. Non creo mai un thread separato o asynctask solo per la chiamata di rete e utilizzo invece enqueue.