rxjava 工作原理分析 调用链分析

看代码

以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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值