observable - RxJava 2 Flowable 是热的还是冷的?
问题描述
我曾经认为 RxJava 2 的 Flowable 被设计为“热”而 Observable 被设计为“冷”。但我认为现在是错误的 - Observable 和 Flowable 都是冷的,但可以通过例如使任一个 Connectable 变热。这个对吗?
解决方案
我认为我们应该逐个元素定义:
冷与热
在Observable
冷和热的情况下,我们可以定义冷是当一个Observable
发出它订阅的相同定义的事件时,例如Observable.just (1, 2, 3, 4, 5)
,而热可能是不可能一直完全相同的事件,例如结果通过改造对数据库的查询或对服务器的请求。
然后我们可以将 aFlowable.just (1, 2, 3, 4, 5)
或 an定义Observable.just (1, 2, 3, 4, 5)
为冷的,在这种情况下,只有很少的元素并且不是将连续发送项目的序列,因此值得将其保持为 Observable。
冷 的想像Observable
一张音乐CD,不管你用多少次,你总是会以同样的顺序听相同的歌曲,而热 Observable
的就像一个电台,你会定期收到不同的信息,也许你订阅了迟到并完成了您想收听的广播节目,否则就不同了。
可观察与可流动
Observable
现在 an和 a之间的主要区别在于Flowable
支持Flowable
背压,防止信息丢失,以防它无法像接收事件一样快地消耗事件。
https://github.com/ReactiveX/RxJava/wiki/Backpressure-(2.0)
ConnectableObservable
在这种ConnectableObservable
情况下,无论可观察的发送者是冷的还是热的,Publisher
在执行后开始向订阅者发出信息。ConnectableObservable::connect
然后
重要的是确定是否需要使用 Observable 或 Flowable,并根据它们发出值的方式,我们可以称之为冷或热。
下一本书给了我很大的推动力:https ://www.amazon.com/Learning-RxJava-Thomas-Nield/dp/1787120422
推荐阅读
- javascript - 在html中异步加载xml并分页显示
- excel - ListObject 的“下标超出范围”错误
- tensorflow - 在构建 tensorflow frm 源时在 Windows 上更改 bazel 构建输出文件夹
- jenkins - jenkins 工作的 .sh 文件的位置是什么?
- sprite-kit - SpriteKit:物理身体“阿尔法”形状问题
- material-ui - 构建一个基本的搜索栏 Material-UI
- c# - 使用未赋值的局部变量 抽象类
- python - django 中的惰性查询集
- react-native - 在 createStackNavigator onPress 中设置标题
- javascript - 提交成功后如何让数据消失