2015-09-16 3 views
8

Pochi giorni fa, quando ho cercato di imparare a utilizzare Retrofit, ho trovato alcuni tutorial che dicono che in alcune occasioni dovremmo usare ASyncTask insieme a Retrofit. Questo mi imbarazza perché la mia impressione era che usassimo Retrofit per evitare di usare ASyncTask. E ora ho capito abbastanza bene Retrofit (basta usarlo e cambiare tutti i miei codici ASyncTask su Retrofit), non ho ancora trovato una buona scusa o ragione per usare ASyncTask con Retrofit. O mi sto perdendo qualcosa qui?Perché utilizzare Retrofit con AsyncTask?

Btw Ho visto almeno 3 diversi tutorial che menzionano sull'uso di Retrofit con ASyncTask, ma non sono riuscito a trovarlo più. Ho potuto trovare solo 1, http://karanbalkar.com/2014/12/tutorial-94-using-retrofit-for-android/

+3

il retrofit può funzionare in modo sincrono o asincrono. utilizzarlo in modo sincrono (con asynctask) è un modo per concatenare facilmente le chiamate che devono avvenire in sequenza. (o è possibile utilizzare Rx per questo.) – njzk2

+0

@ njzk2, è possibile fornire un esempio di chiamate concatenate? Perché non l'ho mai visto ... o forse l'ho fatto, ma potrei aver trascurato ... – imin

+0

prendere in considerazione 2 chiamate, in cui gli argomenti al secondo dipendono dal risultato del primo. Ciò richiede di fare quelle chiamate una dopo l'altra. Considerare ora come si farebbe utilizzando la versione basata sulla callback delle chiamate api e considerare come si farebbe utilizzando la versione sincrona in un asynctask. Dovresti vedere che la versione asynctask è molto più bella. Per i punti extra, fare lo stesso usando la versione Rx della chiamata. – njzk2

risposta

7

Il citato turtorial utilizza chiamate sincrone. Per le chiamate sincrone ha senso inserirle in un AsyncTask.

Tuttavia, poiché Retrofit supporta anche le chiamate asincrone, è più facile utilizzarle direttamente senza un AsyncTask.

+0

Ho davvero pensato che AsyncTask sia usato solo per le chiamate asincrone, da qui il nome AsyncTask. E dalla documentazione qui http://developer.android.com/reference/android/os/AsyncTask.html, l'unica volta che menziona sincrono è nella riga "AsyncTask garantisce che tutte le chiamate di richiamata siano sincronizzate in modo tale che il le seguenti operazioni sono sicure senza sincronizzazioni esplicite. " Con le chiamate sincrone che hai menzionato sopra, intendevi ciò che dice la documentazione? – imin

+0

No, la chiamata di aggiornamento è sincrona, ovvero blocca fino a quando non viene ricevuta una risposta. – Henry

+0

L'ho capito, ma possiamo facilmente eseguire il retrofit in modo asincrono specificando il callback giusto? Il mio commento sopra sull'uso di ASycnTask per le chiamate sincrone, come hai menzionato nella tua risposta. – imin