看代码
以Rxjava的ObservableSubscribeOn举例
public ObservableSubscribeOn(ObservableSource<T> source, Scheduler scheduler) {
super(source);//此source会保存到成员变量,变量的定义在它的父类
this.scheduler = scheduler;
}
ObservableSource source是我们用rxjava调用Observable.create、map、subscribeOn等时,由rxjava自动创建的对象所传入的,其实就是调用方的Observable,,如下:
public final Observable<T> subscribeOn(@NonNull Scheduler scheduler) {
Objects.requireNonNull(scheduler, "scheduler is null");
//this就是调用方的对象
return RxJavaPlugins.onAssembly(new ObservableSubscribeOn<>(this, scheduler));
}
this由ObservableSubscribeOn构造传入,相当于上游的Observable传递到下游的Observable(ObservableSubscribeOn),也就是下游的Observable会持有上游的Observable对象。
当最后调用subscribe,也就是Observable.subscribe开始订阅时,最终会调用subscribeActual,如下
//此函数是所有Observable都会有的方法,是由rxjava实现
public final void subscribe(@NonNull Observer<? super T> observer) {
Objects.requireNonNull(observer, "observer is null");
try {
observer = RxJavaPlugins.onSubscribe(this, observer);
Objects.requireNonNull(observer, "The RxJavaPlugins.onSubscribe hook returned a null Observer. Please change the handler provided to RxJavaPlugins.setOnObservableSubscribe for invalid null returns. Further reading: https