Rxjava從使用到原碼的解析二:Rxjava2的響應式框架設計的事件流向

Rxjava我們可以把他理解成一個河流,事件的起點我們稱爲上游,事件的終點我們稱爲下游,河裏面的水都是從上而下流動,所以Rxjava也一樣,只能從事件的起源再到事件的處理,不可逆狀態,我們如果想要改變事件只能在上游和下游之間對事件進行攔截.

上游: 被觀察者(Observable)

下游: 觀察者(Observer)

示例代碼

    public void rx01(View view) {
        //Rxjava的起點  被觀察  上游
        Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(ObservableEmitter<String> e) throws Exception {
                Log.e(TAG, "上游開始發射事件 1" );
                e.onNext("1");
                Log.e(TAG, "上游發射事件 完成 " );
            }
        }).subscribe(//訂閱,讓被觀察和觀察者產生關聯
                //Rxjava的終點 觀察者  下游
                new Observer<String>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                      Log.e(TAG, "訂閱成功");
                    }

                    @Override
                    public void onNext(String s) {
                        Log.e(TAG, "下游接收處理事件 onNext " + s);
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }

輸出:

訂閱成功

上游開始發射事件 1

下游接收處理事件 onNext 1

上游發射事件 完成

 

經過多次測試總結:

結論一: 順序: 先是下游和上游訂閱成功的onSubscribe,然後是上游的發射事件subscribe,

如果上游戲先有onNext那麼下游就會接收到onNext事件.

結論二: 如果上游先發射onComplete,再發射onError時,會出現閃崩現象,Rxjava不允許這樣

結論三: 如果上游先發射onError,再發射onComplete時,下游會走onError但是不會走onComplete

結論四 如果上游發射了onComplete或者onError事件,那麼他以後的onNext都不會觸發到下游的onNext事件

結論五 切斷下游,如果我的的Activity銷燬了這時個就要切斷下游接收事件,dispose()

 

 

Rxjava理解一

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