RxJava2 实战系列文章

RxJava2 实战知识梳理(1) – 后台执行耗时操作,实时通报 UI
更新
RxJava2 实战知识梳理(2) –
计算一段时间内数据的平均值
RxJava2 实战知识梳理(3) –
优化搜索联想功能
RxJava2 实战知识梳理(4) – 结合 Retrofit
请求新闻消息
RxJava2 实战知识梳理(5) –
简单和进阶的轮询操作
RxJava2 实战知识梳理(6) –
基于左类型的重试请求
RxJava2 实战知识梳理(7) – 基于 combineLatest
实现之输入表单验证
RxJava2 实战知识梳理(8) – 使用 publish + merge
优化先加载缓存,再念博网络数据的求过程
RxJava2 实战知识梳理(9) – 使用 timer/interval/delay
实现任务调度
RxJava2 实战知识梳理(10) – 屏幕旋转导致 Activity
重建时回升任务
RxJava2 实战知识梳理(11) –
检测网络状态并自行重试请求
RxJava2 实战知识梳理(12) – 实战讲解 publish & replay & share & refCount
& autoConnect
RxJava2 实战知识梳理(13) –
如何令错误产生时无自行终止订阅关系
RxJava2 实战知识梳理(14) – 在 token 过期时,刷新过期 token
并重复发起呼吁
RxJava2 实战知识梳理(15) – 实现一个简单易行的 MVP + RxJava + Retrofit
应用


一、前言

实则当前面的篇章被,我们曾触发了定时/周期执行任务的操作符,例如在
RxJava2 实战知识梳理(5) –
简单和进阶的轮询操作 和
RxJava2 实战知识梳理(6) –
基于左类型的重试请求
这片首文章中,我们由此intervalRange贯彻了轮询工作,通过timer落实了延时的重试请求。

今天立马首文章,我们根据
RxJava-Android-Samples
中总结的几乎种状况来复习一下得以兑现定时调度任务的操作符:

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

二、timer

2.1 timer 操作符原理

timer原理图如下所示:

timer 原理图

非常简单,在订阅之后,它会于守候一段时间之后发出一个0多少项,然后收,因此它经常可以用来延时地发送时间,例如
RxJava2 实战知识梳理(5) –
简单与进阶的轮询操作
中,我们采取repeatWhen倡议重订阅时,就是通过timer实现了延时殡葬onNext光阴来兑现时延变长的轮询操作。

2.2 使用 timer 延时 1s 后执行任务,然后收

咱俩用timer操作符实现下面的功用:延时1s后在子线程执行任务,接着就,这里我们使用了timer,并通过subscribe方给下游运行于子线程当中。

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

运作结果吗:

三、interval

3.1 interval 原理

interval的规律图如下所示:

interval 原理图

interval否是一个创建型操作符,它可间隔一段时间就发送一个数目。

3.2 每隔 1s 执行同样涂鸦任务,第一次等任务履行前有 1s 的距离,执行太次

咱俩事先采用interval实现下面这个效应:每隔1s推行同一差任务,第一次任务尽前出1s的间距,执行太次。这是因,使用interval操作符时,默认第一赖只任务要延时与点名间隔相同的年月。

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

运转结果如下所示:

3.3 每隔 1s 执行同一不善任务,立即执行第一不善任务,执行太次

若愿意这执行第一涂鸦任务,那么得为其提供额外的参数,指定第一不成任务之延时:

    //每隔 1s 执行一次任务,立即执行第一次任务,执行无限次
    private void startTimeDemo3() {
        Log.d(TAG, "startTimeDemo3");
        DisposableObserver<Long> disposableObserver = getTimeDemoObserver();
        Observable.interval(0, 1000, TimeUnit.MILLISECONDS).subscribeOn(Schedulers.io()).subscribe(disposableObserver);
        mCompositeDisposable.add(disposableObserver);
    }

运转结果吗:

3.4 每隔 1s 执行同样差任务,立即实施第一次任务,只实行五次

3.3的例证中,我们的职责会极其执行下去,如果我们意在就实行指定次数该怎么收拾呢,其实以
RxJava2 实战知识梳理(5) –
简单和进阶的轮询操作
中示范固定时延的轮询操作时,我们既介绍了应用intervalRange来贯彻,今天,我们使用interval + take的点子来促成,代码如下:

    //每隔 1s 执行一次任务,立即执行第一次任务,只执行五次
    private void startTimeDemo4() {
        Log.d(TAG, "startTimeDemo4");
        DisposableObserver<Long> disposableObserver = getTimeDemoObserver();
        Observable.interval(0, 1000, TimeUnit.MILLISECONDS).take(5).subscribe(disposableObserver);
        mCompositeDisposable.add(disposableObserver);
    }

运行结果吧:

take的规律图如下所示:

take 操作符

其意味着我们只有受前n单数据项,这样跟interval重组就可实现稳定间隔和定点次数的任务尽。

四、delay

4.1 delay 原理

delay的规律图如下所示:

当她承受一个时刻段经常,每当旧的Observable发出了一个多少项时,它便启动一个定时器,等待指定的工夫后重新以这数据发射出去,因此表现吗发射的数量项进行了挪,但是她就见面动onNext/onComplete,对于onError,它会马上发出出去,并且丢弃之前等待发射的onNext事件。

4.2 先实行一个职责,等待 1s,再实践外一个任务,然后收

因为delay不是创建型操作符,所以我们得以就此来推延上游发射过来的数额,下面,让我们兑现之效果:先实行一个职责,等待
1s,再实践外一个任务,然后收。代码如下:

    //先执行一个任务,等待 1s,再执行另一个任务,然后结束
    private void startTimeDemo5() {
        Log.d(TAG, "startTimeDemo5");
        DisposableObserver<Long> disposableObserver = getTimeDemoObserver();
        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);
    }

实践效力啊:


又多篇,欢迎访问我的 Android 知识梳理系列:

  • Android
    知识梳理目录:http://www.jianshu.com/p/fd82d18994ce
  • 个人主页:http://lizejun.cn
  • 私家文化总结目录:http://lizejun.cn/categories/
网站地图xml地图