RxJava 中的共享运算符是做什么的?我应该什么时候使用它?
What does share operator do in RxJava? When should I use it?
我知道 share() 是 publish().refCount() 的替代品。
然后来自 RxJava wiki:
Observable.publish( ) — represents an Observable as a Connectable Observable
ConnectableObservable.refCount( ) — makes a Connectable Observable behave like an ordinary Observable
这让我很困惑。如果在 publish().refCount() 之后,它的行为就像一个普通的 Observable,我为什么要使用它,这个 api 有什么意义?
你说得对 - Observable.share
只是 publish().refCount()
的快捷方式。我认为您在上面引用的描述并不完全清楚,因为 ConnectedObservable.refCount
做得更多 :)
如果您将 Observable
转换为 ConnectableObservable
- 它不会发出项目(即使订阅了某些内容)除非明确调用 ConnectableObservable.connect
- 它基本上推迟执行 subscribe
方法并防止为每个订阅者多次执行它。这种技术通常用于确保在 observable 开始发出项目之前订阅所有订阅者(换句话说 - 在每个人都订阅之后 - connect()
方法被调用)。
如果您有多个订阅者(这种情况经常发生),您必须处理他们的订阅和取消订阅,这就是事情变得棘手的地方。这就是引入 refCount()
的原因。这个运算符 returns new Observable,跟踪有多少订阅者订阅了它,只要有至少一个订阅就保持连接。它也会在第一个订阅者出现时自动连接。
PS。我正在学习如何使用 RxJava,如果我错了 - 请指出!
我知道 share() 是 publish().refCount() 的替代品。 然后来自 RxJava wiki:
Observable.publish( ) — represents an Observable as a Connectable Observable ConnectableObservable.refCount( ) — makes a Connectable Observable behave like an ordinary Observable
这让我很困惑。如果在 publish().refCount() 之后,它的行为就像一个普通的 Observable,我为什么要使用它,这个 api 有什么意义?
你说得对 - Observable.share
只是 publish().refCount()
的快捷方式。我认为您在上面引用的描述并不完全清楚,因为 ConnectedObservable.refCount
做得更多 :)
如果您将 Observable
转换为 ConnectableObservable
- 它不会发出项目(即使订阅了某些内容)除非明确调用 ConnectableObservable.connect
- 它基本上推迟执行 subscribe
方法并防止为每个订阅者多次执行它。这种技术通常用于确保在 observable 开始发出项目之前订阅所有订阅者(换句话说 - 在每个人都订阅之后 - connect()
方法被调用)。
如果您有多个订阅者(这种情况经常发生),您必须处理他们的订阅和取消订阅,这就是事情变得棘手的地方。这就是引入 refCount()
的原因。这个运算符 returns new Observable,跟踪有多少订阅者订阅了它,只要有至少一个订阅就保持连接。它也会在第一个订阅者出现时自动连接。
PS。我正在学习如何使用 RxJava,如果我错了 - 请指出!