Rxjava Schedulers 使用

版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/ContainsK/article/details/73605660

在Rxjava 中使用Schedulers 對線程進行切換。

其中需要使用到兩個方法 observeOn 、 subscribeOn


1:subscribeOn:當我們創建好 觀察者和被觀察者後,調用 subscribe 訂閱事件時,整個事件開始執行.

默認線程爲執行訂閱的當前線程,而subscribeOn是指定訂閱事件所在運行線程。


2:observeOn :設置回調事件運行所在線程,可以在多個回調事件設置不同線程,在回調事件前調用即可。

如果不設置,默認爲subscribe所使用的線程


測試Code:

        Observable.create(new Observable.OnSubscribe<String>() {
            @Override
            public void call(Subscriber<? super String> subscriber) {
                printThread("OnSubscribe--call");
                subscriber.onNext("");
            }
        }).subscribeOn(Schedulers.io())
                .observeOn(Schedulers.computation())
                .map(new Func1<String, Integer>() {
                    @Override
                    public Integer call(String s) {
                        printThread("map");
                        return 1;
                    }
                })
                .observeOn(Schedulers.newThread())
                .flatMap(new Func1<Integer, Observable<String>>() {
                    @Override
                    public Observable<String> call(Integer integer) {
                        printThread("flatMap");
                        return Observable.just(false).map(new Func1<Boolean, String>() {
                            @Override
                            public String call(Boolean aBoolean) {
                                printThread("map2");
                                return null;
                            }
                        });
                    }
                }).observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<String>() {
                    @Override
                    public void onCompleted() {

                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onNext(String s) {
                        printThread("onNext");
                    }
                });

輸出:

OnSubscribe--call -->:RxIoScheduler-2
map -->:RxComputationScheduler-1
flatMap -->:RxNewThreadScheduler-1
map2 -->:RxNewThreadScheduler-1
onNext -->:main




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章