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

Zey*_*ser 7 rx-java

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

Pho*_*ang 9

是.但在名为ReplayingShare的第三方库中.这是链接:https: //github.com/JakeWharton/RxReplayingShare

比较.replay(1).autoConnect()如果下游没有用户,它可以从上游断开连接.

比较.replay(1).refCount()它甚至可以缓存最后一个值,即使你已经与它断开连接.

此外,如果上游结束(无论您使用哪个refCount/ autoConnect),您将无法获得下一个订阅者的重播.但是使用ReplayingShare,您将始终获得最后一个项目缓存.

  • 在ReplayingShare github页面上:“任何终端事件都将清除缓存的值。” 如果上游终止了,那平均值不会被清除吗? (3认同)

yos*_*riz 5

是的,您可以replay(bufferSize)docs使用参数为1的operator :

返回一个ConnectableObservable,它共享对源Observable的单个预订,该预订最多重播该Observable发出的bufferSize项

重播将缓存最后一个项目,并将其重播给任何新订户,请注意,ConnectableObservable因此必须调用connect()以使其开始发射项目,或使用refCount()get Observable来自动使用first 来完成该任务,并在Subscriber取消最后一个订阅时取消订阅。