RxJava- cache() 是否与 replay() 相同?

2022-09-02 20:48:32

我想知道是否有一个操作员可以缓存x个发射,但也可以在指定的时间间隔(例如1分钟)后使它们过期。我正在寻找类似的东西...cache()

Observable<ImmutableList<MyType>> cachedList = otherObservable
    .cache(1, 1, TimeUnit.MINUTES); 

这将缓存一个项目,但会在一分钟后过期并清除缓存。

我做了一些研究,找到了重播运算符。它似乎可以满足这种需求,但我有一些问题。为什么天气炎热,需要连接?这是否使其与运算符不同?我知道模仿一个主题,但它不需要连接。cache()cache()


答案 1

cache并且适用于不同的用例。缓存是一个自动连接的重播所有内容容器,通常用于长期重播。重播可以具有更多的参数化,并且可以执行有界时间/大小的重播,但需要开发人员指定何时开始。该运算符允许您将此类实例转换为普通实例,一旦订阅者订阅它们,该实例就会连接到源。这样,您可以有界和自动连接重播(需要 RxJava 1.0.14+):replayautoConnect()ConnectableObservableObservable

source.replay(1, TimeUnit.SECONDS).autoConnect().subscribe(...);

答案 2

推荐