我浏览了rxjava 1的文档,以下运算符包含调度程序参数的变体: 缓冲 防抖动 延迟 Delaysubscription 从 间隔 范围 重复 repeatWhen 重播 retrywhen 样品 跳跃 skiplast
有人可以解释这些而不是其他人的理由吗?
答案 0 :(得分:3)
需要时间或具有异步方面的运算符采用Scheduler
参数,允许您自定义运算符执行其工作的位置。通常,为方便起见,存在使用默认Scheduler
的重载。
Scheduler
是异步边界的抽象,它提供执行任务Runnable
s,有或没有延迟,并提供当前时间的概念。这种抽象允许使用非真正异步的Scheduler
甚至执行具有实时延迟的任务:例如trampoline
调度程序和TestScheduler
。
它们构成了通过observeOn
在流中切换线程的非阻塞基础,并提供延迟任务的非阻塞执行,例如在一段时间后启动新缓冲区或定期发出值。没有它们,你必须求助于Thread.sleep()
然后阻塞当前线程并可能浪费它。
如果您必须与非反应源或API进行交互,那么这些API可能会自行阻塞:从磁盘读取字节,等待套接字的InputStream
等等。Scheduler
s让你从一些线程中移出这个阻塞,例如Android主线程或Swing事件调度线程,它们释放这些线程来执行它们的主要任务:渲染用户界面并对用户输入作出反应。
因此,当您看到Scheduler
参数时,它可能意味着:
observeOn
,subscribeOn
),replay
,使用TestScheduler
进行测试),from
Future
,一个包含在Observable
中的非反应性API。)答案 1 :(得分:0)
似乎提供了具有调度程序参数的变体,可能存在阻塞(虽然我不清楚为什么我们需要这些变量,因为我们有observeOn。)