RxJava 2 Flowable 是热的还是冷的?

Jul*_* A. 3 observable rx-java

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

Jul*_*mus 5

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

冷与热

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的就像一个广播电台,你会定期收到不同的信息,也许你订阅了迟到并完成了您想听的广播节目,或者只是不同。

可观察与可流动

现在 anObservable和 a之间的主要区别FlowableFlowable支持背压,防止信息丢失,以防它不能像接收事件一样快地消耗事件。

https://github.com/ReactiveX/RxJava/wiki/Backpressure-(2.0)

可连接可观察

在这种ConnectableObservable情况下, 执行 后Publisher开始向订阅ConnectableObservable::connect者发送信息,无论可观察的发送者是冷的还是热的。

然后

重要的是确定是否有必要使用 Observable 或 Flowable 并根据它们如何发出它们的值?我们可以称之为冷或热。

下一本书给了我很大的推动:https : //www.amazon.com/Learning-RxJava-Thomas-Nield/dp/1787120422

  • “现在 Observable 和 Flowable 之间的主要区别在于 Flowable 支持背压” - 这并不完全正确,在 RxJava 1.x 中,Observable 是处理背压的,而在 RxJava 2.x 中,背压的处理被移至单独的类,Flowable (2认同)