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

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<String> observer = new Observer<String>() {
            @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<Long>() {
                    @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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值