Android RxJava Observable.interval()不会停止发出项目

时间:2016-07-01 22:19:46

标签: java android rx-java reactive-programming rx-android

我有一个静态字段

 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()之后,旧的计时器副本仍会继续发出项目?

1 个答案:

答案 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);