Android 响应式编程框架 - RxJava2(二)基础使用

RxJava可以浓缩为异步两个字,其核心的东西不外乎两个, Observables(被观察者) 和 Observable(观察者)。Observables可以发出一系列的 事件(例如网络请求、复杂计算、数据库操作、文件读取等),事件执行结束后交给Observable 的回调处理。

一、RxJava三要素

  1. 被观察者(Observable)
  2. 观察者(Observer)
  3. 订阅(subscribe)

二、创建一个简单的RxJava2栗子

1.添加RxJava2依赖

 implementation 'io.reactivex.rxjava2:rxjava:2.0.1' implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'

2.创建Observble(被观察者)

 Observable observable = Observable.create(new ObservableOnSubscribe() {            @Override            public void subscribe(ObservableEmitter e) throws Exception {                    e.onNext("哈哈");                    e.onComplete();            }        });

3.创建Observer(观察者)

Observer observer = new Observer() {            @Override            public void onSubscribe(Disposable d) {            }            @Override            public void onNext(String value) {                    Log.e("RxJava2","observer---onNext---"+value);            }            @Override            public void onError(Throwable e) {            }            @Override            public void onComplete() {            }        };

4.关联订阅(Subscribe)

observable.subscribe(observer);

5.栗子测试结果
这里写图片描述
从测试结果可以看到一旦 Observer 订阅了 Observable,Observable 就会调用 Observer 的 onNext()、onCompleted()、onError() 等方法。至此一个完整的 RxJava 调用就完成了。

三、RxJava操作符

RxJAVA 操作符实在是太多了这里我们就不一一列举出来了,列出常用的

  • interval 延时几秒,每隔几秒开始执行
  • take 超过多少秒停止执行
  • map 类型转换
  • observeOn 在主线程运行
  • doOnSubscribe 在执行的过程中
  • subscribe 订阅

四、RxJAVA的线程调度器

常用的是 Schedulers.io()进行耗时操作、和AndroidSchedulers.mainThread()更新ui

调度器种类
  1. Schedulers.immediate()
    直接在当前线程运行,相当于不指定线程,默认的Scheduler

  2. Schedulers.newThread():
    总是启动新线程,在新的线程中执行操作

  3. Schedulers.io()
    I/O操作(读写文件、读写数据库、网络信息交互等)所使用的Scheduler,行为模式和newThread()差不多,区别在于io()的内部实现是用一个无数量上限的线程池,可以重用空闲的线程,因此多数情况下,io()比newThread()更有效率。不要把计算工作放在io(),可以避免穿件不必要的线程。

  4. Schedulers.computation()
    计算所使用的Scheduler。这个计算是指CPU密集型计算,即不会被I/O等操作限制性的操作,例如图形的计算。这个Sheduler使用的固定的线程池,大小为cpu核数。不要把I/O放在computation中,否则I/O操作等待时间会浪费cpu。用于计算任务,如事件循环或和回调处理,不要用于IO操作(IO操作请使用Schedulers.io());默认线程数等于处理器
    的数量

  5. Schedulers.from(executor)
    使用指定的Executor作为调度器。

  6. Schedulers.trampoline()
    当其它排队的任务完成后,在当前线程排队开始执行

  7. AndroidSchedulers.mainThread()
    在RxAndroid中,他指定操作将在Android主线程中执行。

指定线程
  1. observerOn(Schedulers)
    指定观察者Observer在哪个线程执行

  2. subscribeOn(Scheduler)
    指定被观察者Observable在哪个线程执行

栗子(倒计时按钮)
 private void sendCode() {        //创建倒计时总数        final int count = 10;        Flowable.intervalRange(0, count, 0, 1, TimeUnit.SECONDS)                .observeOn(AndroidSchedulers.mainThread())//线程切换                .doOnNext(new Consumer() {                    @Override                    public void accept(Long aLong) throws Exception {                        btnSendCode.setBackgroundColor(Color.GRAY);                        btnSendCode.setEnabled(false);                        btnSendCode.setTextColor(Color.WHITE);                        btnSendCode.setText(count - aLong + "秒后重新获取");                    }                }).doOnComplete(new Action() {            @Override            public void run() throws Exception {                btnSendCode.setText("重新获取验证码");                btnSendCode.setBackgroundColor(Color.parseColor("#ff33b5e5"));                btnSendCode.setTextColor(Color.WHITE);                btnSendCode.setEnabled(true);            }        }).subscribe();    }

RxJava2 学习资料
https://github.com/ReactiveX/RxJava
https://github.com/ReactiveX/RxAndroid

更多相关文章

  1. Android进阶2:线程和线程池(2)—— HandlerThread原理解析
  2. Android Handler ExecutorService(线程池) 缓存模式
  3. 开源一个友盟 for android 操作的封装包
  4. Android之文件操作和JUnit
  5. Android ADT 离线下载操作步骤
  6. Android测试用例执行线程和UI线程
  7. Android文件系统的结构及目录用途、操作方法
  8. 在android中利用多线程实现对控件的更新(动态修改文本框中的值)。
  9. 进程方法Android进程与线程基本知识

随机推荐

  1. 关于Android的一些设计
  2. android recovery模式及ROM制作
  3. 专项测试(三)内存泄漏调试经验分享 (一)
  4. Android(安卓)在线视频播放器(Vitamio)
  5. Android(安卓)targetSdkVersion了解一下
  6. android小白感悟:Android(安卓)Studio安装
  7. 详解Android中AsyncTask的使用
  8. Android读写XML(中)——SAX
  9. Android的ADB工具使用
  10. Android的内存泄露测试 mat