-
timer
:创建型操作符,用于延时执行任务 -
interval
:创建型操作符,用于周期执行任务 -
delay
:辅助型操作,用于延时传递数据
1.timer
timer
原理图如下所示:
timer()
只是用来创建一个Observable
,并延迟发送一次的操作符,timer()
并不会按周期执行
//延迟 1s 后执行一个任务,然后结束
private void startTimeDemo1() {
DisposableObserver<Long> disposableObserver = getObserver();
Observable.timer(1000, TimeUnit.MILLISECONDS)
.subscribeOn(Schedulers.io())
.subscribe(disposableObserver);
mCompositeDisposable.add(disposableObserver);
}
2.interval
interval
原理图如下所示:
interval()
也是用来创建Observable
的,并且也可以延迟发送,但interval()
是按周期执行的
//每隔 1s 执行一次任务,第一次任务执行前有 1s 的间隔,执行无限次
private void startTimeDemo2() {
DisposableObserver<Long> disposableObserver = getObserver();
Observable.interval(1000, TimeUnit.MILLISECONDS)
.subscribeOn(Schedulers.io())
.subscribe(disposableObserver);
mCompositeDisposable.add(disposableObserver);
}
3. delay
delay
原理图如下所示:
delay()
:延迟一段指定的时间再发送来自Observable
的发送结果,其实
delay()
的常规使用跟timer()
一致。delay()
是用于流中的操作,跟map()
、flatMap()
的级别是一样的,而timer()
是用于创建Observable
//先执行一个任务,等待 1s,再执行另一个任务,然后结束
private void startTimeDemo5() {
DisposableObserver<Long> disposableObserver = getObserver();
Observable.just(0L).doOnNext(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
Log.d(TAG, "执行第一个任务");
}
})
.delay(1000, TimeUnit.MILLISECONDS)
.subscribe(disposableObserver);
mCompositeDisposable.add(disposableObserver);
}