RxJava系列之timer/interval/delay操作符

  • timer:创建型操作符,用于延时执行任务
  • interval:创建型操作符,用于周期执行任务
  • delay:辅助型操作,用于延时传递数据

1.timer

timer原理图如下所示:

timer.png

timer()只是用来创建一个Observable,并延迟发送一次的操作符,timer()并不会按周期执行

    //延迟 1s 后执行一个任务,然后结束
    private void startTimeDemo1() {
        DisposableObserver disposableObserver = getObserver();
        Observable.timer(1000, TimeUnit.MILLISECONDS)
                  .subscribeOn(Schedulers.io())
                  .subscribe(disposableObserver);
        mCompositeDisposable.add(disposableObserver);
    }

2.interval

interval原理图如下所示:

interval.png

interval()也是用来创建Observable的,并且也可以延迟发送,但interval()是按周期执行的

    //每隔 1s 执行一次任务,第一次任务执行前有 1s 的间隔,执行无限次
    private void startTimeDemo2() {
        DisposableObserver disposableObserver = getObserver();
        Observable.interval(1000, TimeUnit.MILLISECONDS)
                  .subscribeOn(Schedulers.io())
                  .subscribe(disposableObserver);
        mCompositeDisposable.add(disposableObserver);
    }

3. delay

delay原理图如下所示:

delay.png

delay():延迟一段指定的时间再发送来自Observable的发送结果,
其实delay()的常规使用跟timer()一致。delay()是用于流中的操作,跟map()flatMap()的级别是一样的,而timer()是用于创建Observable

    //先执行一个任务,等待 1s,再执行另一个任务,然后结束
    private void startTimeDemo5() {
        DisposableObserver disposableObserver = getObserver();
        Observable.just(0L).doOnNext(new Consumer() {
            @Override
            public void accept(Long aLong) throws Exception {
                Log.d(TAG, "执行第一个任务");
            }
        })
                  .delay(1000, TimeUnit.MILLISECONDS)
                  .subscribe(disposableObserver);
        mCompositeDisposable.add(disposableObserver);
    }

你可能感兴趣的:(RxJava系列之timer/interval/delay操作符)