Retrofit crea chiamate di rete sul thread principale?
Domanda
Sto cercando di esplorare retrofit + okhttp su Android.Ecco alcuni codici che ho trovato online:
RestAdapter restAdapter = new RestAdapter.Builder().setExecutors(executor, executor)
.setClient(new OkClient(okHttpClient))
.setServer("blah").toString())
.build();
.
Se non utilizzo il servizio di esecutore, il mio codice sarà in esecuzione sul thread principale?Dovrei creare richieste web in un nuovo thread, quindi?
Soluzione
Il metodo che restituisce un valore è sincronizzato.
@GET("/user/{id}/asset")
Asset getUserAsset(@Path("id") int id);
.
Per farlo Asincrono tutto ciò di cui hai bisogno è aggiungere un callback.
@GET("/user/{id}/asset")
void getUserAsset(@Path("id") int id, Callback<Asset> cb);
.
Spero che questo aiuti.
Saluti!
Altri suggerimenti
I metodi di retrofit possono essere dichiarati per l'esecuzione sincrona o asincrona.
Un metodo con un tipo di ritorno verrà eseguito sincrono in modo sincrono.
@GET("/user/{id}/photo")
Photo getUserPhoto(@Path("id") int id);
.
L'esecuzione asincrona è necessario che l'ultimo parametro del metodo sia un Callback
.
@GET("/user/{id}/photo")
void getUserPhoto(@Path("id") int id, Callback<Photo> cb);
.
su Android, i callback saranno eseguiti sul thread principale.Per applicazioni desktop, i callback si verificheranno sullo stesso thread che eseguirà la richiesta HTTP.
Retrofit integra anche RXJAVA per supportare i metodi con un tipo di ritorno di rx.Observable
@GET("/user/{id}/photo")
Observable<Photo> getUserPhoto(@Path("id") int id);
.
Le richieste osservabili sono sottoscritte asincrono e osservate sullo stesso thread che ha eseguito la richiesta HTTP.Per osservare su un filo diverso (E.G. Thread principale di Android) Chiamare observeOn(Scheduler)
sul Observable
restituito.
Nota: l'integrazione RXJAVA è sperimentale.