缓存最后发出的项RxJava运算符

时间:2017-05-09 01:11:52

标签: rx-java

是否有运营商缓存最后发出的项目并将其传递给每个新订户?换句话说,一个使观察者行为像BehaviorSubject

的运算符

2 个答案:

答案 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自动执行此操作,并在取消订阅最后一个订阅时取消订阅。