重置 Observable.interval 活动时间

Reset Observable.interval time on event

我一收到事件就开始这个 observable

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

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

这取决于你运行这个区间所处的环境。

首先,您可以使用 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(/* ... */);