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



我有一个静态字段

 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;
    }
}

猜测取消订阅后可观察对象必须停止发射项。然而,它不起作用。如果函数updatePrices

private static void update(long tick) {
    Log.d(TAG, "tick");
}

调用removeTimer()后继续打印日志。

那么问题是如何在我的可观察对象中正确地停止发出项?

<标题> 解决

问题是在双重调用setTimer()。

但是我仍然有一个问题。有人能解释为什么timer的旧副本在第二次调用setTimer()后仍然继续发出项目吗?

也许太晚了,但希望它能帮助别人!

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

相关内容

  • 没有找到相关文章

最新更新