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

本贴最后更新于 2048 天前,其中的信息可能已经事过境迁

一、前言

  • 之前写了四篇从 Demo 到源码、从表现到内部实现原理,通过源码的分析初步学习了 RxJava2.X 的一些基本操作及原理,有如下几点
    1、ObservableObserver 是如何发生订阅关系的
    2、onNextonCompleteonError 被调用的次数限制及实现流程
    3、onSubscribe 方法为何会第一个被调用?及如何控制 Disposable 来取消订阅事件
    4、分两篇分析了 RxJava2.X 切换订阅线程和观察者线程的源码
  • 接下来我们将根据之前的分析成果从设计上分析 RxJava2.X 多次切换线程的有效性

二、具体分析

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

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

  • 2、切换观察者线程的有效性

  • 我们在 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、分析 observeOnsubscribeOn 调用顺序的影响及有效性

  • 喜欢就给我留言哦,欢迎留言提供更好的建议!

相关文章

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3169 引用 • 8208 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...