Rxjava学习使用

对于Rxjava的学习使用(一)

之前看了过网上的 吴拉丁大神 写的相关文章。自己在总结一下,方便以后复习、查看。

原文链接:

https://www.jianshu.com/p/6fd8640046f1 《关于RxJava最友好的文章》

https://www.jianshu.com/p/e61e1307e538 《关于RxJava最友好的文章————进阶》

最初还是提供一个 开关 与 台灯的例子。

//创建一个被观察者(开关)

Observable switcher=Observable.create(new Observable.OnSubscribe<String>(){

        @Override
        public void call(Subscriber<? super String> subscriber) {
            subscriber.onNext("On");
            subscriber.onNext("Off");
            subscriber.onNext("On");
            subscriber.onNext("On");
            subscriber.onCompleted();
        }
    });

//创建一个观察者(台灯)

     Subscriber light=new Subscriber<String>() {
        @Override
        public void onCompleted() {
            //被观察者的onCompleted()事件会走到这里;
            Log.d("DDDDDD","结束观察...\n");
        }

        @Override
        public void onError(Throwable e) {
                //出现错误会调用这个方法
        }
        @Override
        public void onNext(String s) {
            //处理传过来的onNext事件
            Log.d("DDDDD","handle this---"+s)
        }

//订阅

        switcher.subscribe(light);

流程图

“Observable.create(new Observable.OnSubscribe<String>()” 中的 OnSubscribe 是链接“台灯”和“开关”的关键

理解的关键步骤

  • 订阅这个动作,实际上是观察者(subscriber)对象把自己传递给被观察者(observable)内部的onSubscribe。
  • onSubscribe的工作就是调用call(subscriber)来通知被观察者发送消息给这个subscriber。

  • 以上的结论对于下面我们理解操作符的原理十分有帮助,因此一定要看明白。

操作符的理解

按 map 操作符举例

     public final <R> Observable<R> map(Func1<? super T, ? extends R> func)
     { 
        //创建了全新代理的的Observable,构造函数传入的参数是OnSubscribe 
        //OnSubscribeMap显然是OnSubscribe的一个实现类, 
        //也就是说,OnSubscribeMap需要实现call()方法 
        //构造函数传入了真实的Observable对象 //和一个开发者自己实现的Func1的实例 
        return create(new OnSubscribeMap<T, R>(this, func)); 
        }
  • 1 他会将传入的参数交给他 特定的‘观察者’实现类—->
  • 2 在这个实现类的 call 方法中将参数传给一个内部的代理类,在将这个代理类添加到‘观察者’的SubscriptionList集合中(应该是用来处理多个代理类的)—>
  • 3 让外部的‘被观察者’去订阅者代理类。

理解的流程图

对流程图的描述

1 通过调用“被观察者”的 .subscribe() 方法发起订阅 –> 来到了 “被观察者”的唯一属性onSubscribe –>调用 onSubscribe.call()方法,将我们自己创建的‘观察者’传进call(),现在真正发送了事件!

2 在call 方法中传进去的 ‘观察者’ 转换成‘代理观察者’—> 让外部的‘被观察者’,来订阅这个‘代理观察者’

3 通过onNext(),将参数回调给“代理观察者”。

4 在通过onNext(),将参数回调给“观察者”,就可以将在这里拿到的参数,进行需要的操作了。

  • 实际上看源码 可能由于版本的关系 和原作者贴的源码不太一样,就先这么理解吧。

下一篇准备学习各种 操作的使用

猜你喜欢

转载自blog.csdn.net/weixin_37558974/article/details/82152030