课程需要的依赖库
三种抽象流
链式构建流
例如现在有一条链式调用,如下:首先从事件源,通过create操作符创建一个观察者,之后再调用map操作符,因为使用了装饰器模式,每一次调用操作符就是在基于上一个被观察者扩展功能创建一个新的被观察对象,因此下游的被观察者持有者上游的被观察者。 每次在创建新的被观察者时,又会创建新的观察者,所以这个被观察者同样持有下游观察者的引用
订阅流
订阅是由被观察者订阅观察者,首先我们开发者会创建一个observer0,被构建调用链中最后的被观察者ObservableFlatMap(observable5)订阅,调用实际执行订阅的subcribeActual方法,在ObservableFlatMap中会创建新的观察者MergeObserver(observer1),并把下游的观察者observer0传递给observer1,observer1又被上游的ObservableOnObserveOn注册,调用实际执行订阅的subscribeActual方法,如此往上 最终观察者observer5被事件source引用,至此订阅流完成
事件回调流
observable0(ObservableCreate)持有ObservableOnSubscribe的引用,这个是事件发射源source,将会由observable0开启,在observable0的subscribeActual方法中,会创建事件发射器
//创建具体的发射器实例,并闯入具体的事件T,和具体的观察者
CreateEmitter<T> emitter = new CreateEmitter<T>(observer);
//最好还需要将事件和被观察者绑定在一起
source.subscribe(emitter);
我们在被观察者中通过emitter发射的事件,又会根据订阅链从observer5往下游流动,直到observer0由他去执行真正的事件逻辑。
subscribeOn的生效
为什么多次调用subscribeOn只有最上游的调用生效,因为订阅流是从下游往上游流动,在多次指定subscribe的执行线程时,只有最上游的修改是生效的。
observeOn的生效
事件回调流是顺序执行的,由上游的事件源调用onNext,回调到最下游的onNext方法。而observeOn是改变onNext的执行线程,所以observeOn只会影响其下游的事件的执行线程