我想知道是否有一个cache()
运算符可以缓存x个数量的排放,但是在指定的时间间隔(例如1分钟)之后也会使它们到期。我正在寻找类似的东西......
Observable<ImmutableList<MyType>> cachedList = otherObservable
.cache(1, 1, TimeUnit.MINUTES);
这会缓存一个项目,但会在一分钟后过期并清除缓存。
我做了一些研究并找到了replay运算符。看起来它可以满足这种需求,但我有一些问题。为什么它很热并且需要连接?这是否与cache()
运算符不同?我知道cache()
模仿主题,但不需要连接。
答案 0 :(得分:27)
cache
和replay
适用于不同的用例。缓存是一种自动连接重放 - 通常用于长期重放的所有容器。重放可以有更多的参数化,可以进行有限的时间/大小重放,但需要开发人员指定何时开始。 autoConnect()
运算符允许您将此类ConnectableObservable
实例转换为普通Observable
,并在订阅者订阅后连接到源source.replay(1, TimeUnit.SECONDS).autoConnect().subscribe(...);
。这样,您就可以进行有界和自动连接重播(需要RxJava 1.0.14 +):
<script type="text/javascript">
// Initialize the plugin with no custom options
$(document).ready(function () {
var left = 0;
var timer;
function tick() {
left++;
$(".ticker").css("margin-left", -left + "px");
timer = setTimeout(tick, 16);
}
$(".ticker").hover(
function() {
clearTimeout(timer);
},
function() {
setTimeout(tick, 16);
})
tick();
});