我有一个静态字段
private static Subscription timer;
和两个静态方法:
public static void setTimer() {
timer = Observable.interval(2, TimeUnit.SECONDS, Schedulers.computation())
.doOnNext(tick -> update(tick))
.observeOn(AndroidSchedulers.mainThread())
.subscribe();
}
public static void removeTimer() {
if (timer != null && !timer.isUnsubscribed()) {
timer.unsubscribe();
timer = null;
}
}
取消补给后猜测Observable必须停止发射物品。 然而,它不起作用。如果函数updatePrices是
private static void update(long tick) {
Log.d(TAG, "tick");
}
调用removeTimer()后,将继续打印日志。
所以问题是如何正确地停止在我的观察中发射物品?
问题在于对setTimer()的双重调用。
但是我还有一个问题。任何人都可以解释为什么在第二次调用setTimer()之后,旧的计时器副本仍会继续发出项目?
答案 0 :(得分:0)
可能为时已晚,但可能对其他人有帮助!
Observable.interval(TICK_MILLIS, TimeUnit.MILLISECONDS, AndroidSchedulers.mainThread())
.map(v -> v * TICK_MILLIS) // use to map value to onNext func,
.takeUntil(v -> v > MAX_TICKS) // Stop Timer here.
.take() // You can use take to stop timer after N count
.subscribe(this::onNext, Log::d ,this::onComplete);