重置事件的Observable.interval时间

时间:2019-12-18 15:48:57

标签: rx-java rx-java2

我在收到事件后便立即开始观察此事

Observable.interval(0, 5, TimeUnit.SECONDS)
                .subscribeOn(Schedulers.io())
                .subscribe()

现在,当另一个事件发生时,我想将间隔重置为0。 我该怎么办?

1 个答案:

答案 0 :(得分:1)

这取决于您运行此间隔的环境。

对于其中一个,您可以使用SerialDisposable并在出现新事件时继续替换内容(从而处置旧内容):

final SerialDisposable interval = new SerialDisposable();

public void onEvent() {
    interval.set(
        Observable.interval(0, 5, TimeUnit.SECONDS, Schedulers.io())
                  .subscribe(/* ... */)
    );
}

或者,如果您有事件源Observable,则只需应用switchMap

PublishSubject<Event> eventSource = PublishSubject.create();

eventSource.switchMap(event -> 
    Observable.Observable.interval(0, 5, TimeUnit.SECONDS, Schedulers.io())
)
.subscribe(/* ... */);