RxJava2.X 源码分析(五):论切换线程次数的有效性

作者博客

http://www.cherylgood.cn

前言

之前写了四篇从Demo到源码、从表现到内部实现原理,通过源码的分析初步学习了RxJava2.X的一些基本操作及原理,有如下几点
1、Observable与Observer是如何发生订阅关系的
2、onNext、onComplete、onError被调用的次数限制及实现流程
3、onSubscribe方法为何会第一个被调用?及如何控制Disposable来取消订阅事件
4、分两篇分析了RxJava2.X切换订阅线程和观察者线程的源码

接下来我们将根据之前的分析成果从设计上分析RxJava2.X多次切换线程的有效性

具体分析

切换订阅事件线程的有效性

在RxJava2.X 源码分析(三):探索RxJava2之订阅线程切换原理 中我们分析了订阅线程切换的源码。

订阅事件的传递是从下往上传递,最终传递到上游被订阅者执行订阅流程

假设有三级,每级均发生线程切换:

下游Observer(订阅)->2级Observable(调用) 2级Observer(切换线程1订阅)->1级Observable (调用)1级Obsever (切换线程2订阅)->上游Observable 触发真正的订阅事件 下发数据->1级Obsever(接收后下发)->2级Obsevser (接收后下发)->下游Obsever

Ok,很显然,即使呢N此调用切换订阅线程的api接口,真正作用于订阅事件的线程是最接近上游Obsevable的一次。根据RxJava的调用习惯也就是第一次,所以subscribeOn的调用只有第一次生效

切换观察者线程的有效性

我们在RxJava2.X 源码分析(四)中分析了观察者事件线程切换的源码

订阅数据的数据流是从上而下下发的,最终传递到下游的观察者的onXXX回调方法内

同样,假设有三级,每级均发生线程切换

下游Observer(订阅)->2级Observable(调用) 2级Observer(订阅)->1级Observable (调用)1级Obsever (订阅)->上游Observable 触发真正的订阅事件 下发数据->1级Obsever(接后切换线程1回调onXXX方法下发数据)->2级Obsevser (接收后切换线程1回调onXXX方法下发数据))->下游Obsever 的onXXX回调方法收到数据

Ok,很显然,每级的Observer的onXXX方法都在不同的线程中被调用。所以observeOn的调用会多次生效

总结

Ok,本篇篇幅相对前面几篇,是不是长度很满意。

写这篇的目的有

1、梳理前两篇的调用次序
2、分析observeOn与subscribeOn调用顺序的影响及有效性

今日推荐

 

 

 

给初学者的RxJava2.0教程:响应式拉取

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值