2017年1月21日土曜日

Rx SubscribeOn と ObserveOn の使い分け

端的に述べますと、
SubscribeOn = ワーカースレッド
ObserveOn = UI スレッド

こちらのコード例が見事です。ご覧ください!
[Android] OkHTTP + Retrofit + RxAndroid で REST クライアントを実装する
http://dev.classmethod.jp/smartphone/android/okhttp-retrofit-rxandroid/

東京の天気を取得して、画面に表示するようです。
東京の天気を取得」がワーカースレッド。
画面に表示」を UI スレッドで実行するようになっています。


        // 非同期処理の実行
        adapter.create(WeatherApi.class).get("weather", "Tokyo,jp")
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<WeatherEntity>() {
                    @Override
                    public void onCompleted() {
                        Log.d("MainActivity", "onCompleted()");
                    }
 
                    @Override
                    public void onError(Throwable e) {
                        Log.e("MainActivity", "Error : " + e.toString());
                    }
 
                    @Override
                    public void onNext(WeatherEntity weather) {
                        Log.d("MainActivity", "onNext()");
                        if (weather != null) {
                            ((TextView) findViewById(R.id.text)).setText(weather.weather.get(0).main);
                        }
                    }
                });


SubscribeOn は、最初の ObservableOn より前の処理に適用されます。
ObserveOn は、それより後の処理に適用されます。2 個目以降の ObserveOn も同様です。

図にするとこのようなイメージです:

 


0 件のコメント:

コメントを投稿