Ne Modernisation faire des appels de réseau sur le thread principal?
Question
Je suis en train d'explorer Rénovation+OkHttp sur Android.Voici un code que j'ai trouvé en ligne :
RestAdapter restAdapter = new RestAdapter.Builder().setExecutors(executor, executor)
.setClient(new OkClient(okHttpClient))
.setServer("blah").toString())
.build();
Si je n'utilise pas d'exécuteur testamentaire de service, mon code est en cours d'exécution sur le thread principal ?Dois-je faire des demandes sur le web dans un nouveau thread, donc ?
La solution
La méthode qui renvoie une valeur le fait de manière synchrone.
@GET("/user/{id}/asset")
Asset getUserAsset(@Path("id") int id);
Pour le faire asynchrone tout ce dont vous avez besoin est d'ajouter un rappel.
@GET("/user/{id}/asset")
void getUserAsset(@Path("id") int id, Callback<Asset> cb);
J'espère que cela aide.
Cordialement!
Autres conseils
Rénovation méthodes peuvent être déclarés de manière synchrone ou asynchrone.
Une méthode avec un type de retour seront exécutées de manière synchrone.
@GET("/user/{id}/photo")
Photo getUserPhoto(@Path("id") int id);
D'exécution asynchrone nécessite le dernier paramètre de la méthode de être un Callback
.
@GET("/user/{id}/photo")
void getUserPhoto(@Path("id") int id, Callback<Photo> cb);
Sur Android, les rappels seront exécutées sur le thread principal.Pour les applications de bureau rappels qui va se passer sur le même thread que celui qui a exécuté la requête HTTP.
Rénovation intègre également RxJava de méthodes de soutien, avec un type de retour rx.Observable
@GET("/user/{id}/photo")
Observable<Photo> getUserPhoto(@Path("id") int id);
Observables demandes sont souscrites de manière asynchrone et observées sur le même thread que celui qui a exécuté la requête HTTP.Observer, sur un thread différent (par ex.Android thread principal) appel observeOn(Scheduler)
sur le revenu Observable
.
Note:Le RxJava intégration est expérimental.