专栏名称: 安卓开发精选
伯乐在线旗下账号,分享安卓应用相关内容,包括:安卓应用开发、设计和动态等。
目录
相关文章推荐
复利大王  ·  卷麻了!某律所提供“空姐”服务 ·  1小时前  
鸿洋  ·  Android×鸿蒙×AI 技术刊#第9期 ... ·  23 小时前  
复利大王  ·  北京97师大美女征友 ·  昨天  
复利大王  ·  美女硕士被妈妈的驭男术坑了 ·  昨天  
复利大王  ·  O站要卖身了 ·  2 天前  
51好读  ›  专栏  ›  安卓开发精选

是什么让我们阅读 RxJava 源码如此艰难?

安卓开发精选  · 公众号  · android  · 2019-06-24 11:50

正文

请到「今天看啥」查看全文



本篇文章我把Observable称为“节点”,Observer称为“处理者”,一是因为我被观察者、被观察者、谁订阅谁给绕晕了,更重要的是我觉得这个名称比较符合Rxjava的设计思想。


Observable调用create方法创建一个自己,重写subscribe方法说:如果 我有一个处理者Observer,我就把“hello”,“world”交给它处理。


Observable调用了subscribe方法,真的找到了Observer。于是兑现承诺,完成整个调用逻辑。


这里是“如果”有处理者,需要subscribe方法被调用时,“如果”才成立。Rxjava就是建立在一系列的“如果”(回调)操作上的。


“nullMap”操作符(核心)


1、创建一个observable

2、调用空map操作符做变换

3、交给observer处理


MainActivity.java

Observable.create(new Observable() {
            @Override
            public void subscribe(Observer observer) {
                observer.onNext("hello");
                observer.onNext("world");
                observer.onComplete();
            }
        })
        .nullMap()
        .subscribe(new Observer() {
            @Override
            public void onNext(String s) {
                Log.e("yxj",s);
            }

            @Override
            public void onComplete() {
                Log.e("yxj","onComplete");
            }
        });


nullMap()等价于 下面这段代码。


即把上个节点的数据不做任何修改的传递给下一节点的map操作


.map(new Function<StringString>() {
    @Override
    public String apply(String s) throws Exception {
        return s;
    }
})

"nullMap"操作符在Rxjava源码里并不存在 ,是我方便大家理解Rxjava运行机制写出来的。


因为nullMap操作是一个 base变换操作 ,map,flatMap,subscribeOn,observeOn操作符都是在nullMap上修改而来。所以Rxjava的变换的基础就是nullMap操作符。


Observable.java
// 这就是Rxjava的变换核心

public Observable nullMap() {

        return new Observable() {
            @Override
            public void subscribe(final Observer observerC) {

                Observer observerB = new Observer() {
                    @Override
                    public void onNext(T t) {
                        observerC.onNext(t);
                    }

                    @Override
                    public void onComplete() {
                        observerC.onComplete();
                    }
                };
                Observable.this






请到「今天看啥」查看全文