android - library - ¿Retrofit hace llamadas de red en el hilo principal?
retrofit parameters (2)
Estoy tratando de explorar Retrofit + OkHttp en Android. Aquí hay un código que encontré en línea:
RestAdapter restAdapter = new RestAdapter.Builder().setExecutors(executor, executor)
.setClient(new OkClient(okHttpClient))
.setServer("blah").toString())
.build();
Si no uso el servicio de ejecutor, ¿se ejecutará mi código en el hilo principal? ¿Debo hacer solicitudes web en un nuevo hilo por lo tanto?
El método que devuelve un valor lo hace de forma sincrónica.
@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!
Los métodos de modificación pueden declararse para ejecución síncrona o asíncrona.
Un método con un tipo de retorno se ejecutará de forma síncrona.
@GET("/user/{id}/photo")
Photo getUserPhoto(@Path("id") int id);
La ejecución asíncrona requiere que el último parámetro del método sea una Callback
.
@GET("/user/{id}/photo")
void getUserPhoto(@Path("id") int id, Callback<Photo> cb);
En Android, las devoluciones de llamada se ejecutarán en el hilo principal. Para las aplicaciones de escritorio, las devoluciones de llamada ocurrirán en el mismo hilo que ejecutó la solicitud HTTP.
Retrofit también integra RxJava para admitir métodos con un tipo de rx.Observable
de rx.Observable
@GET("/user/{id}/photo")
Observable<Photo> getUserPhoto(@Path("id") int id);
Las solicitudes observables se suscriben de forma asíncrona y se observan en el mismo hilo que ejecutó la solicitud HTTP. Para observar en un hilo diferente (por ejemplo, el hilo principal de Android), llame a observeOn(Scheduler)
en el Observable
devuelto.
Nota: La integración de RxJava es experimental.