RxJava源码分析系列:
RxJava系列一:从使用层面分析源码及执行流程
RxJava系列二:根据操作符分析整个上下游的执行流程
我们先写一个最简单的使用方法,这个已经很白痴了吧

我们可以把这里出现的角色分成三个:第一个是被观察者Observable,第二个是观察者Observer,第三个是我称之为事件产生场所ObservableOnSubscribe(里面包含事件产生者,一般被成为发射器ObservableEmitter)
我们先从第一个方法说起:

create方法中返回的是一个被观察者ObservableCreate,被观察者里面包含了一个事件产生场所,接下来是订阅的方法 subscribe,而ObservableCreate是继承Observable的,这里应用了模板设计模式,subscribe方法是Observable中的,Observable提供了一个subscribeActual抽象方法,说白了ObservableCreate调用subscribe方法实际上就是调用自己重写的subscribeActual方法。我们查看下这个方法

这个方法里面对观察者进行了一层包裹,实际上可以看成对观察者进行了一层代理。这个代理就是事件发射器。在里面主要调用的是source.subscribe(parent)方法,source就是这个所谓的事件产生场所,说白了就是在这个方法里面进行事件的发射。而这个方法也即是我们上面重写的方法了。我们重写中是使用observer的代理即发射器对事件进行发射,查看下发射器这个类就明白了

所以在事件产生场所进行事件的发射,到最后也就是调用了观察者对应的方法。至此RxJava最简单的使用的运作流程也就分析完毕了
另外需要注意一点的是dispose()方法,这个方法是用于阻断事件的接收,查看源码可以看到onError和onComplete方法中均调用了一次它,而却onError和onComplete是互斥的。
网友评论