後付けはメインスレッドにネットワーク呼び出しを行いますか?
質問
AndroidのRetrofit + OKHTTPを探索しようとしています。これはオンラインで見つけたいくつかのコードです:
RestAdapter restAdapter = new RestAdapter.Builder().setExecutors(executor, executor)
.setClient(new OkClient(okHttpClient))
.setServer("blah").toString())
.build();
.
executorサービスを使用しない場合は、メインスレッド上でコードが実行されますか?私は新しいスレッドでWeb要求をするべきですか?
解決
値を返す方法は同期しています。
@GET("/user/{id}/asset")
Asset getUserAsset(@Path("id") int id);
.
それを行うために必要なのは、コールバックを追加することだけです。
@GET("/user/{id}/asset")
void getUserAsset(@Path("id") int id, Callback<Asset> cb);
.
これが役立つことを願っています。
雑談
他のヒント
RetoFitメソッドは、同期実行または非同期実行に対して宣言できます。
戻り型の方法は同期的に実行されます。
@GET("/user/{id}/photo")
Photo getUserPhoto(@Path("id") int id);
.
非同期実行では、メソッドの最後のパラメータがCallback
に必要です。
@GET("/user/{id}/photo")
void getUserPhoto(@Path("id") int id, Callback<Photo> cb);
.
Androidでは、コールバックがメインスレッドで実行されます。デスクトップアプリケーションの場合コールバックはHTTPリクエストを実行したのと同じスレッドで発生します。
RetoFitはRXJAVAをサポートメソッドに統合してrx.Observable
@GET("/user/{id}/photo")
Observable<Photo> getUserPhoto(@Path("id") int id);
.
観測可能な要求は非同期的に購読され、HTTP要求を実行したのと同じスレッド上で観察されます。別のスレッド(例えば、Androidのメインスレッド)を守るために、返されたobserveOn(Scheduler)
のObservable
を呼び出します。
注:RXJAVA統合は実験的です。
所属していません StackOverflow