首页 > 解决方案 > RxJava 2 Flowable 是热的还是冷的?

问题描述

我曾经认为 RxJava 2 的 Flowable 被设计为“热”而 Observable 被设计为“冷”。但我认为现在是错误的 - Observable 和 Flowable 都是冷的,但可以通过例如使任一个 Connectable 变热。这个对吗?

标签: observablerx-java

解决方案


我认为我们应该逐个元素定义:

冷与热

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


推荐阅读