重置 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(/* ... */);
我一收到事件就开始这个 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(/* ... */);