¿Retrofit hacer llamadas de la red en el hilo principal?
Pregunta
Estoy tratando de explorar Retrofit+OkHttp en Android.Aquí un poco de código que he encontrado en internet :
RestAdapter restAdapter = new RestAdapter.Builder().setExecutors(executor, executor)
.setClient(new OkClient(okHttpClient))
.setServer("blah").toString())
.build();
Si yo no uso el ejecutor de servicio, será mi código se ejecuta en el hilo principal ?Debo hacer peticiones web en un nuevo hilo de ahí ?
Solución
El método que devuelve un valor lo hace sincronamente.
@GET("/user/{id}/asset")
Asset getUserAsset(@Path("id") int id);
Para hacerlo asíncrono, todo lo que necesita es agregar una devolución de llamada.
@GET("/user/{id}/asset")
void getUserAsset(@Path("id") int id, Callback<Asset> cb);
Espero que esto ayude.
Saludos!
Otros consejos
Retrofit métodos pueden ser declarados para sincrónicas o asincrónicas.
Un método con un tipo de retorno será ejecutado de forma sincrónica.
@GET("/user/{id}/photo")
Photo getUserPhoto(@Path("id") int id);
La ejecución asíncrona requiere que el último parámetro del método a ser un Callback
.
@GET("/user/{id}/photo")
void getUserPhoto(@Path("id") int id, Callback<Photo> cb);
En Android, las devoluciones de llamada se ejecuta en el hilo principal.Para las aplicaciones de escritorio devoluciones de llamada que va a suceder en el mismo hilo que ejecuta la petición HTTP.
Retrofit también integra RxJava a métodos de soporte con un tipo de retorno de rx.Observable
@GET("/user/{id}/photo")
Observable<Photo> getUserPhoto(@Path("id") int id);
Observables de las solicitudes suscritas de forma asincrónica y la observada en el mismo hilo que ejecuta la petición HTTP.Para observar en un subproceso diferente (por ejemplo,Android hilo principal) de la llamada observeOn(Scheduler)
en el devuelto Observable
.
Nota:El RxJava integración es experimental.