後付けはメインスレッドにネットワーク呼び出しを行いますか?

StackOverflow https://stackoverflow.com//questions/21006807

  •  21-12-2019
  •  | 
  •  

質問

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統合は実験的です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top