【问题标题】:Cache last emitted item RxJava Operator缓存最后发出的项目 RxJava 运算符
【发布时间】:2019-09-20 14:34:34
【问题描述】:

是否有缓存最后发出的项目并将其传递给每个新订阅者的操作员?换句话说,一个使 observable 表现得像 BehaviorSubject?

【问题讨论】:

    标签: rx-java


    【解决方案1】:

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

    对比.replay(1).autoConnect() 如果下游没有订阅者,它可以与上游断开连接。

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

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

    【讨论】:

    • 来自 ReplayingShare github 页面:“任何终端事件都会清除缓存的值。”如果上游结束,该平均值不会被清除吗?
    【解决方案2】:

    是的,您可以使用 replay(bufferSize) 运算符,参数为 1,来自 docs:

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

    replay 将缓存最后一个项目,并将其重播给任何新订阅者,请注意它是 ConnectableObservable,因此您必须调用 connect() 使其开始发射项目,或使用 refCount() 获取 Observable使用第一个Subscriber 自动执行,并在最后一个订阅取消订阅时取消订阅。

    【讨论】:

      猜你喜欢
      • 2016-02-10
      • 1970-01-01
      • 2020-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-08
      • 1970-01-01
      相关资源
      最近更新 更多