是否有运营商缓存最后发出的项目并将其传递给每个新订户?换句话说,一个使观察者行为像BehaviorSubject
?
答案 0 :(得分:9)
是。但在名为ReplayingShare的第三方库中。链接在这里: https://github.com/JakeWharton/RxReplayingShare
与.replay(1).autoConnect()
比较如果下游没有订户,它可以与上游断开连接。
与.replay(1).refcount()
比较即使您已经与其断开连接,它也可以缓存最后一个值。
此外,如果上游结束(无论您使用refcount
/ autoConnect
),您都不会获得下一个订阅者的重播。但是使用ReplayingShare,您将始终获得最后一个项目缓存。
答案 1 :(得分:5)
是的,您可以replay(bufferSize)
使用ConnectableObservable
运算符,参数为1,来自docs:
返回一个ConnectableObservable,它共享对源Observable的单个订阅,该Observable最多重放该Observable发出的bufferSize项
重播将缓存最后一项,并将其重播给任何新订阅者,请注意它是connect()
,因此您必须调用refCount()
使其开始发出项目,或使用Observable
来获取Subscriber
,使用第一个@android:color/foreground_material_light
自动执行此操作,并在取消订阅最后一个订阅时取消订阅。