ファイルといくつかのデータをサーバにアップロードするために単純なIntentService
を作成しました。アップロードが完了したらToast
を表示できるようにしたいが、そうするためにはメインスレッドにする必要がある。RxJavaサービススレッドを購読する
実際のリクエストを処理するためにRxJavaと組み合わせてRetroFitを使用しているので、observeOn(AndroidSchedulers.mainThread())
メソッドを使用してメインスレッドにToast
を作成する必要があると考えました。問題は(サーバーのために)私は要求を再送する必要があるかもしれないという場合です。この場合、postRequest()
メソッドを再度呼び出さなければなりません。
この新しい要求がメインスレッドに追加されました。したがって、私はsubscribeOn(Schedulers.io())
メソッドを使用することを避けるために、これは無駄に思えますが、Service
はすでに独自のスレッドにあると考えています。
Observable
はsubscribeOn()
Service
スレッドになるはずですか?またはIntentService
の代わりにService
をサブクラス化して、io
スレッドを使用するだけですか?
private void postRequest(String title, LatLng location,
String description, MultipartBody.Part attachment) {
mNetworkService.postRequest(title, location.latitude, location.longitude,
description, attachment).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(response -> {
if (response.status() == 1) {
ToastUtil.makeText(getApplicationContext(), "Request Sent");
stopSelf();
} else {
postRequest(title, location, description, attachment);
}
});
}