共享运营商在RxJava中做了什么?我应该什么时候使用它?

时间:2017-08-17 02:45:24

标签: java rx-java rx-java2 reactivex

我知道share()是publish()。refCount()的替代品。 然后来自RxJava wiki:

  

Observable.publish() - 将Observable表示为可连接的Observable   ConnectableObservable.refCount() - 使Connectable Observable的行为类似于普通的Observable

这让我很困惑。如果在publish()。refCount()之后,它只是表现得像普通的Observable,我为什么要使用它,这个api有什么意义呢?

1 个答案:

答案 0 :(得分:1)

你是对的 - Observable.share只是publish().refCount()的捷径。我认为您上面引用的描述并不完全清楚,因为ConnectedObservable.refCount会做多一点:)

如果您将Observable转换为ConnectableObservable - 除非明确调用ConnectableObservable.connect,否则它不会发出项目(即使订阅了某些内容) - 它基本上会延迟执行subscribe方法并防止每个订户多次执行它。这种技术通常用于确保在可观察的开始发出项目之前订阅所有订阅者(换句话说 - 在每个人都订阅之后 - 调用connect()方法)。

如果您有多个订阅者(经常发生的事情),您必须处理他们的订阅和取消订阅,这是事情变得棘手的地方。这就是refCount()被引入的原因。此运算符返回新的Observable,跟踪订阅了多少订阅者并保持连接,只要至少有一个订阅。当第一个订户出现时,它也会自动连接。

PS。我正在学习如何使用RxJava,如果我错了 - 请指出来!