最通俗易懂的教你使用RxJava3(二)

Rxjava 系列目录

  1. 最通俗易懂的教你使用RxJava3(一)
  2. 最通俗易懂的教你使用RxJava3(二)
  3. 最通俗易懂的教你使用RxJava3(三)

博客创建时间:2020.04.17
博客更新时间:2021.04.15

以Android studio build=4.1.3,gradle=6.5,SdkVersion 30来分析讲解。如图文和网上其他资料不一致,可能是别的资料版本较低而已


前言

科普几个术语


常见术语

1. 上下游
RxJava中的数据流包括一个数据源、0个或多个中间步骤、一个数据消费者或组合子步骤(其中的步骤负责以某种方式使用数据流):

source
  .operator1()
  .operator2()
  .operator3()
  .subscribe(consumer)

以operator2的角度看,向上看source看则为 上游 ,向下看subscribe(consumer)为 下游

2. 运动的对象
在RxJava的文档中, emission, emits, item, event, signal, data and message都是近义词,都表示沿着数据流移动的对象。

3. 背压 backpressure
Rxjava中会经常遇到一种情况就是被观察者发送消息太快,但它的操作符或者订阅者不能及时处理相关的消息。使用背压允许当前步骤在通常无法知道上游将发送多少项数据的情况下限制数据流的内存使用。

在RxJava中,Flowable类被设计成支持背压,Observable类专用于非背压操作。除此还可以通过使用限流操作符来进行减压,相关操作符可以参考博客《最通俗易懂的教你使用RxJava3(二)》限流操作符

4. 调度者Schedulers
RxJava操作符不直接使用Thread或ExecutorServices,而是使用所谓的调度器Scheduler,这些调度器将并发源抽象到统一API后面。
调度器的使用类型

  1. Schedulers.computation(): 在后台的固定数量的专用线程上运行计算密集型工作。大多数异步操作符将此作为其默认调度程序。

  2. Schedulers.io(): 在一组动态变化的线程上运行类似I/ o或阻塞操作。

  3. Schedulers.single(): 以顺序和FIFO方式在单个线程上运行工作。

  4. Schedulers.trampoline(): 在参与的线程中以顺序和FIFO方式运行工作,通常用于测试目的。

当然特定平台还有其他的调度用法,如android系统中有额外的使用:
AndroidSchedulers.mainThread(), SwingScheduler.instance() or JavaFXSchedulers.gui().

还可以通过通过Scheduler .from(Executor) 方法使用自定义的 ExecutorService [^1]任务调度服务。它将拥有更大但仍然固定的线程池(不同于分别使用compute()和io())。


5. Hot and cold Observable
Observable 数据流有两种类型:hot 和 cold。

Cold Observable
只有当有订阅者订阅的时候,Observable 才开始执行发射数据流的代码。并且每个订阅者订阅的时候都独立的执行一遍数据流代码。

常用create、 just、range、timer就是 Cold Observable。

Hot Observable
不管有没有订阅者订阅,Observable创建后就开始发射数据流。当有订阅者订阅后,从订阅后的事件开始发送给这个订阅者,之前的事件这个订阅者是接受不到的。

6. 装配时间
通过应用各式各样的中间操作符来准备数据流,发生在装配时间。

7.订阅时间
Subscription time 这是在内部建立处理步骤链的流上调用subscribe()时的临时状态

flow.subscribe()

8. 调度者
Android 平台中还有AndroidSchedulers.mainThread()

  1. Schedulers.computation(): 在后台的固定数量的专用线程上运行计算密集型工作。大多数异步操作符将此作为其默认调度程序。
  2. Schedulers.io(): 在一组动态变化的线程上运行类似I/ o或阻塞操作。
  3. Schedulers.single(): 以顺序和FIFO方式在单个线程上运行工作。
  4. Schedulers.trampoline(): 在参与的线程中以顺序和FIFO方式运行工作,通常用于测试目的。

总结

本测试Demo源码
gitee:https://gitee.com/luofaxin/RxJava3Analysis.git
github:https://github.com/l424533553/RxJava3Analysis.git


相关链接

  1. 最通俗易懂的教你使用RxJava3(一)
  2. 最通俗易懂的教你使用RxJava3(二)
  3. 最通俗易懂的教你使用RxJava3(三)

扩展链接:

  1. Rxjava源码分析之IO.Reactivex.Observer
  2. Rxjava源码分析之IO.Reactivex.CompositeDisposable
  3. Rxjava源码分析之IO.Reactivex.Observable

扩展训练:

  1. 背压的概念和背压策略
  2. 常见的RxJava概念

博客书写不易,您的点赞收藏是我前进的动力,千万别忘记点赞、 收藏 ^ _ ^ !

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值