美文网首页
RxAndroid 源码解析一

RxAndroid 源码解析一

作者: 緦菍亭芷 | 来源:发表于2017-03-02 15:10 被阅读0次

    参考学习:http://blog.csdn.net/starsliu/article/details/51038275

    RxAndroid 源码解析一

    被观察者(主题,订阅内容执行者)

    Observable 类

    OnSubscribe  继承 extends Action1

                        Action1  extends Action

                      Action  extends  Function

    观察者(事件,订阅事件)

    Observer  接口

    Subscriber 实现 implements Observer

    撸代码

    Observable 类核心代码

    public final static Observable just(finalTvalue) {

                return ScalarSynchronousObservable.create(value);

    }

    ScalarSynchronousObservable 类核心代码

    public final classScalarSynchronousObservable extends Observable {

                public static final ScalarSynchronousObservable create(T t) {

                      return newScalarSynchronousObservable(t);

                }

    private final T t;

    protected  ScalarSynchronousObservable(finalT t) {

               //都会构造一个OnSubscribe,通过这个来传递参数t,调用本事的方法call(),调用参数订阅者方法

                super(new OnSubscribe() {

               @Override

                 public void call(Subscriber s) {

                      s.onNext(t);

                     s.onCompleted();

          }

    });

    this.t= t;

    }

    再回到Observable 类核心代码

    public final Subscription subscribe(final  Action1 onNext) {

             if(onNext ==null) {

                       throw newIllegalArgumentException("onNext can not be null");

            }

    //看重点吧Action1封装通过观察者Subscriber来调用

            return subscribe(new   Subscriber() {

                                 @Override

                                  public final void   onCompleted() {

                              }

                               @Override

                           public final void  onError(Throwable e) {

                                 throw new  OnErrorNotImplementedException(e);

                          }

                        @Override

                      public final void  onNext(Targs) {

                                      onNext.call(args);

                          }

                     });

    }

    public final   Subscription subscribe(Subscriber subscriber) {

              return   Observable.subscribe(subscriber,this);

    }

    private static Subscription subscribe(Subscriber subscriber, Observable observable) {

                try{

                     //本处只显示核心代码

                          hook.onSubscribeStart(observable, observable.onSubscribe).call(subscriber);

                   return  hook.onSubscribeReturn(subscriber);

    RxJavaObservableExecutionHook类核心代码

    public abstract class  RxJavaObservableExecutionHook {

              public OnSubscribe onSubscribeStart(Observable observableInstance,finalOnSubscribe onSubscribe) {

                 // pass-thru by default

                return  onSubscribe;

    }

    总结:最好发现是OnSubscribe(action)-----》Subscriber(action)



    第一次用简书写文字,程序员有什么好的写文字啊,看到推荐下啊,这个代码显示太难看了

    相关文章

      网友评论

          本文标题:RxAndroid 源码解析一

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