RxJava 2.0中的Observable和Flowable有什么区别?

36

Observable 和 Flowable 接口看起来是相同的。为什么 RxJava 2.0 中要引入 Flowable 接口?在什么情况下应该选择使用 Flowable 而不是 Observable?


3
反压支持。 - EpicPandaForce
https://medium.com/@ajay.dewari/backpressure-in-reactivex-rxjava-and-difference-between-observable-and-flowable-6074c25234ea - HAXM
1个回答

54

如文档中所述:文档:

在 RxJava 0.x 中引入背压的一个小遗憾是,与其拥有一个单独的响应式基类,Observable本身被改进了。 背压的主要问题是许多热源(例如UI事件)无法合理地进行背压并导致意外的MissingBackpressureException异常(即初学者不会预料到这种情况)。

我们试图通过在2.x中将io.reactivex.Observable设置为非背压,并使新的io.reactivex.Flowable成为启用背压的响应式基类来解决此问题。

当您需要随时间推移相对较少的项目(<1000),并且生产者过载消费者从而导致OOM的风险不存在时,请使用Observable

当您需要处理相对较大数量的项目,并需要仔细控制Producer的行为以避免资源耗尽和/或拥堵时,请使用Flowable


背压当您有一个可观察对象,该对象以太快的速度发出项目,以至于消费者无法跟上流程并导致已发出但未消耗的项目存在。

如何管理和控制已发出但未被订阅者消耗的项目是背压策略所处理的问题。

参考链接


4
我认为它们仍应该支持一个通用接口,或者Flowable应该扩展Observable,这样它们就可以合并在一起。 - Victor Grazi
https://medium.com/@ajay.dewari/backpressure-in-reactivex-rxjava-and-difference-between-observable-and-flowable-6074c25234ea - HAXM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接