一起Talk Android吧(第五百三十八回:RxJava中的timer)

文章目录

  • 概念介绍
  • 使用方法
  • 示例代码
  • 经验总结

各位看官们大家好,上一回中咱们说的例子是"RxJava中的多线程切换",本章回中介绍的例子是" RxJava中的timer"。闲话休提,言归正转,让我们一起Talk Android吧!

概念介绍

我们在前面章回中介绍了RxJava中线程相关的内容,本章回中将介绍与timer相关的内容,这里说的timer主要指延时和定时发送事件。这些操作也是通过操作符完成
的,与这些操作相关的操作符为timerinterval.

使用方法

  • 操作符timer表示延时(delay)发送事件,延长的时间通过该方法的参数指定,第一个参数为时间值,第二个参数为时间单位;
  • 操作符interval表示每隔一段时间定期发送事件,时间通过该方法的参数指定,第一个参数为时间值,第二个参数为时间单位;注意:发送事件一直运行,不会主动停止。

示例代码

  • timer示例
Log.d(TAG, "rxJavaEx: start: "+System.currentTimeMillis());
Disposable disposable = Observable.timer(2,TimeUnit.SECONDS)
        .subscribe(new Consumer<Long>() {
            @Override
            public void accept(Long aLong) throws Throwable {
                Log.d(TAG, "accept end: "+" "+System.currentTimeMillis());
            }
        });

try {
    TimeUnit.SECONDS.sleep(3);
    if(disposable !=null && !disposable.isDisposed())
        disposable.dispose();
} catch (InterruptedException e) {
    e.printStackTrace();
}

在上面的代码中,我们通过timer操作符设定了一个2s延时,为了验证延时是否有效,我们在发送事件前和收到事件后分别打印了系统当前的时间,程序运行结果如下:

rxJavaEx: start: 1680530167569
rxJavaEx: accept end:  1680530169580

从上面的运行结果中可以看到start与end的时间差接近2s,这表明程序中的延时有效果。

  • interval示例
Disposable disposable = Observable.interval(1,TimeUnit.SECONDS)
        .subscribe(new Consumer<Long>() {
            @Override
            public void accept(Long aLong) throws Throwable {
                Log.d(TAG, "accept time: "+aLong);
            }
        });

try {
    TimeUnit.SECONDS.sleep(3);
    if(disposable !=null && !disposable.isDisposed()){
        disposable.dispose();
        disposable = null;
        Log.d(TAG, "rxJavaEx: stop timer");
    }
} catch (InterruptedException e) {
    e.printStackTrace();
}

在上面的代码中,我们通过interval操作符设定了一个1s的间隔时间,程序会每隔1s发送一次事件。为了方便分析,我们把发送的事件,也就是时间值(参数aLaong中
的值)打印出来。因为发送事件一直在进行,我们让主程序等待3s,然后停止发送事件。编译并且运行上面的程序,可以得到以下结果:

rxjava: accept time: 0
rxjava: accept time: 1
rxjava: rxJavaEx: stop timer

从上面的程序运行结果中可以看到,被观察者每隔1s发送一次事件,到第3s秒时,我们在主程序中主动停止发送事件。

经验总结

timerinterval这两个操作符发送的事件是固定的,事件值为从0开始的数字,每发送一次递增一次。因此我们无法指定事件的内容,同时我们也不能手动发送事件,
事件内容是Long类型的数值,观察者中的参数需要与此类型保持一致。

我们总结为:使用timer和interval这两个操作符时,被观察者的类型,事件类型以及事件内容都是固定的,观察者的类型需要与被观察者保持一致。

与前面章回中的其它操作符相比,我们不能灵活使用被观察者和观察者,以及被观察者发送的事件。

看官们,关于"RxJava中的timer"的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

你可能感兴趣的:(一起Talk,Android吧,rxjava,android,timer,延时)