美文网首页Android开发经验谈Android开发
逆推分析RxLifeCycle的实现原理

逆推分析RxLifeCycle的实现原理

作者: 白与兰与白兰地 | 来源:发表于2019-04-16 15:53 被阅读3次

直接上代码,以下代码为根据RxLifeCycle的实现提取出的一个完整的上游数据源到下游数据源所经过的历程
,注释已经写的差不多了

Ob
 .compose(new ObservableTransformer<Object, Object>() {
                            @Override
                            public ObservableSource<Object> apply(Observable<Object> upstream) {
                                //一个subject既是Observable又是Observer
                                Observable<ActivityEvent> activityEventObservable = OpenAccountActivity.this.provideLifecycleSubject()
                                        //Ob只会向最后订阅的Ov发送事件,调用share即可以
                                        .share();

                                return upstream
                                        //takeUntil有两种实现
                                        // 一种是:当返回true时,就发送onComplete
                                        // 另一种是:当(参数指定的)数据源发射事件时,发送onComplete
                                        //这里采用第二种,同时借助filter操作符(控制数据源发送的事件是否会被拦截),实现当到达对应生命周期时发送onComplete的效果
                                        .takeUntil(
                                                //每当联合的数据源中,有数据源发送新的事件时,就会将所有的数据源发送的最新事件合并起来,发送一个新的事件
                                                //这里利用这个特性,在每个生命周期方法的最后调用onNext发送生命周期事件
                                                Observable.combineLatest(
                                                        //将订阅时的生命周期转化为停止发射事件的生命周期
                                                        activityEventObservable
                                                                .take(1)
                                                                .map(new Function<ActivityEvent, ActivityEvent>() {
                                                                    @Override
                                                                    public ActivityEvent apply(ActivityEvent activityEvent) throws Exception {
                                                                        return activityEvent;
                                                                    }
                                                                }),
                                                        //跳过订阅时的生命周期,当后续生命周期发送
                                                        activityEventObservable
                                                                .skip(1),
                                                        new BiFunction<ActivityEvent, ActivityEvent, Boolean>() {
                                                            @Override
                                                            public Boolean apply(ActivityEvent bindUntilEvent, ActivityEvent lifecycleEvent) throws Exception {
                                                                return lifecycleEvent.equals(bindUntilEvent);
                                                            }
                                                        })
                                                        //是否拦截事件
                                                        .filter(b -> b));
                            }
                        })

相关文章

网友评论

    本文标题:逆推分析RxLifeCycle的实现原理

    本文链接:https://www.haomeiwen.com/subject/qgdmfqtx.html