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理解一

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