3. Rxjava2 : 创建操作符(有关时间)

1. RxJava2 : 什么是观察者模式
2. RxJava2 : 创建操作符(无关时间)
3. Rxjava2 : 创建操作符(有关时间)
4. Rxjava2 : 变换操作符
5. Rxjava2 : 判断操作符
6. Rxjava2 : 筛选操作符
7. Rxjava2 : 合并操作符
8. Rxjava2 : do操作符
9. Rxjava2 : error处理
10. Rxjava2 : 重试
11. Rxjava2 : 线程切换

api use
timer {{Observable.timer}}
interval {{Observable.interval}}
intervalRange {{Observable.intervalRange}}

timer

  1. 指定时间后发送
  2. 默认发送值为Long类型的0;
  3. 如果不通过第三个参数指定线程的话,则会采取默认订阅线程(rxjava线程池当中的一条新线程)
  4. 发送完毕后,会自动发送 onComplete
Log.d(TAG, "in");
        Observable.timer(1,TimeUnit.SECONDS)
                .subscribe(new Observer<Long>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(Long aLong) {
                        Thread thread = Thread.currentThread();
                        String name = thread.getName();
                        Log.d(TAG, "thread:"+name);
                        Log.d(TAG, "aLong:" + aLong);
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.d(TAG, "onError");
                    }

                    @Override
                    public void onComplete() {
                        Log.d(TAG, "onComplete");
                    }
                });

log

//注意一下时间,是1s后发送
02-12 15:04:01.823 29256-29256/... D/SplashActivity: in
02-12 15:04:02.833 29256-29311/... D/SplashActivity: thread:RxComputationThreadPool-1
02-12 15:04:02.833 29256-29311/... D/SplashActivity: aLong:0
02-12 15:04:02.833 29256-29311/... D/SplashActivity: onComplete

interval

  1. 默认是无限发送的,可以通过take来截取一部分,之后会介绍take
  2. 与timer相似,如果不额外指定的话,则会采取默认订阅线程(rxjava线程池当中的一条新线程)
  3. 与timer相似,无法指定起始值,也为默认的Long类型的0
  4. 支持指定延时,指定后,会在延时后才开始执行
  5. 因为会无限发送,所以不会自动发送 onComplete
Log.d(TAG, "in");
        Observable.interval(1,TimeUnit.SECONDS)
                .subscribe(new Observer<Long>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(Long aLong) {
                        Thread thread = Thread.currentThread();
                        String name = thread.getName();
                        Log.d(TAG, "thread:"+name);
                        Log.d(TAG, "aLong:" + aLong);
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.d(TAG, "onError");
                    }

                    @Override
                    public void onComplete() {
                        Log.d(TAG, "onComplete");
                    }
                });

log

02-12 15:12:25.393 29776-29776/... D/SplashActivity: in
02-12 15:12:26.403 29776-29826/... D/SplashActivity: thread:RxComputationThreadPool-1
02-12 15:12:26.403 29776-29826/... D/SplashActivity: aLong:0
02-12 15:12:27.393 29776-29826/... D/SplashActivity: thread:RxComputationThreadPool-1
02-12 15:12:27.393 29776-29826/... D/SplashActivity: aLong:1
02-12 15:12:28.393 29776-29826/... D/SplashActivity: thread:RxComputationThreadPool-1
02-12 15:12:28.393 29776-29826/... D/SplashActivity: aLong:2
02-12 15:12:29.393 29776-29826/... D/SplashActivity: thread:RxComputationThreadPool-1
02-12 15:12:29.393 29776-29826/... D/SplashActivity: aLong:3

intervalRange

  1. 和nterval类似,但多了支持了两个参数,也就是range的两个参数,起始值和数量
  2. 值得注意的是: interval的第一次发送,是间隔之后的时间,而intervalRange因为指定了延迟时间,直接采用延迟时间,并不是延迟时间与间隔时间相加,即使延迟时间可能小于间隔时间
  3. 指定数量后,则不再是无限发送了
  4. 发送完毕后,会自动发送 onComplete
//参数1:起始值,参数2:个数,参数3:延迟,参数4:间隔
Log.d(TAG, "in");
        Observable.intervalRange(3,5,1,2,TimeUnit.SECONDS)
                .subscribe(new Observer<Long>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(Long aLong) {
                        Thread thread = Thread.currentThread();
                        String name = thread.getName();
                        Log.d(TAG, "thread:"+name);
                        Log.d(TAG, "aLong:" + aLong);
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.d(TAG, "onError");
                    }

                    @Override
                    public void onComplete() {
                        Log.d(TAG, "onComplete");
                    }
                });

log

02-12 15:25:00.913 30707-30707/... D/SplashActivity: in
02-12 15:25:01.913 30707-30755/... D/SplashActivity: thread:RxComputationThreadPool-1
02-12 15:25:01.913 30707-30755/... D/SplashActivity: aLong:3
02-12 15:25:03.913 30707-30755/... D/SplashActivity: thread:RxComputationThreadPool-1
02-12 15:25:03.913 30707-30755/... D/SplashActivity: aLong:4
02-12 15:25:05.913 30707-30755/... D/SplashActivity: thread:RxComputationThreadPool-1
02-12 15:25:05.913 30707-30755/... D/SplashActivity: aLong:5
02-12 15:25:07.913 30707-30755/... D/SplashActivity: thread:RxComputationThreadPool-1
02-12 15:25:07.913 30707-30755/... D/SplashActivity: aLong:6
02-12 15:25:09.913 30707-30755/... D/SplashActivity: thread:RxComputationThreadPool-1
02-12 15:25:09.913 30707-30755/... D/SplashActivity: aLong:7
02-12 15:25:09.913 30707-30755/... D/SplashActivity: onComplete
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言:上篇文章我们讲解了RxJava最基本的基础知识原理,这篇呢我打算讲解下怎么来创建一个observable被观...
    六_六阅读 252评论 0 0
  • 学习RxJava,做一下笔记笔记:RxJava(二) 1、描述 RxJava是一个基于事件流的实现异步操作的库,类...
    RoJacKing阅读 579评论 0 2
  • 怎么如此平静, 感觉像是走错了片场.为什么呢, 因为上下游工作在同一个线程呀骚年们! 这个时候上游每次调用emit...
    Young1657阅读 1,522评论 2 1
  • 注:只包含标准包中的操作符,用于个人学习及备忘参考博客:http://blog.csdn.net/maplejaw...
    小白要超神阅读 2,241评论 2 8
  • Retrofit Retrofit的本质 准确来说,Retrofit只是负责对网络请求接口的封装,真正的网络请求工...
    哎呦呦胖子斌阅读 25,150评论 5 48