Android拾萃 - RxJava(一)

本文详细介绍了RxJava的基础概念,包括观察者模式的应用、Observable与Observer的定义及工作原理。通过示例代码展示了如何创建被观察者与观察者,以及如何通过subscribe建立两者之间的订阅关系。此外还讲解了事件传递过程中的控制流程与线程切换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境搭建

在主项目APP gradle的dependencies {}里添加以下依赖,最新的引用请参考官网RxAndroid

compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'io.reactivex.rxjava2:rxjava:2.1.3'
趣解rxjava

RxJava也是基于观察者模式来组建自己的程序逻辑的,就是构建被观察者(Observable),观察者(Observer/Subscriber),然后建立二者的订阅关系(就像那根电线,连接起台灯和开关)实现观察,在事件传递过程中还可以对事件做各种处理。

able英文解释为可以被,可以如何的
Observable: 被观察者(不支持背压)
Flowable: Rxjava2才有的(支持背压被观察者)

er表示的人,观察者
Observer:观察者的接口
Subscriber:实现观察者接口的抽象类,并封装了一些方法,更方便使用,如onNext可以执行多个,onCompleted之后会解除监听(发送者的onComplete之后的事件依旧会继续发送,但是接收者接收到onComplete之后就停止接收事件了.)onerro(发送者onError之后的事件依旧会继续发送,但是接收者当接收到onError之后就会停止接收事件了.)

onError事件和onComplete事件是互斥的,但是这并不代表你配置了多个onError和onComplete一定会崩溃,多个onComplete是可以正常运行的,但是只会接收到第一个,之后的就不会再接收到了,多个onError时,只会接收到第一个,第二个会直接造成程序崩溃.

观察者和被观察者怎么建立关系呢?
subscribe: 订阅关系开始,实际就是观察者(subscriber)对象把自己传递给被观察者(observable)内部的onSubscribe。

我们知道,点击事件的监听函数都是On开头的,同样的rxjava的观察监听叫OnSubscribe:被观察者执行方法回调,调用call(subscriber)来通知被观察者发送消息给这个subscriber。

创建被观察者
//创建一个被观察者(开关)
 Observable switcher=Observable.create(new Observable.OnSubscribe<String>(){

            @Override
            public void call(Subscriber<? super String> subscriber) {
                subscriber.onNext("On");
                subscriber.onNext("Off");
                subscriber.onNext("On");
                subscriber.onNext("On");
                subscriber.onCompleted();
            }
        });
创建观察者

观察者是观察和处理事件传递的终点,有onNext onCompleted onError三个回调方法。

Subscriber light = new Subscriber<String>() {
    @Override
    public void onCompleted() {
        Log.d("DDDDDD","结束观察...\n");
    }

    @Override
    public void onError(Throwable e) {
        //出现错误会调用这个方法
    }
    @Override
    public void onNext(String s) {
        //处理事件
        Log.d("DDDDD","handle this---"+s);
    }
}
订阅
switcher.subscribe(light);

一旦观察关系建立,被观察者的事件就会发射出来,观察者最终收到事件,最后解除监听。

来自网络的图(侵删)

RxJava1 和 RxJava2

观察流程

运行进程控制

默认情况下,发送者和接收者都运行在主线程,但是这显然是不符合实际需求的,我们在日常使用中,通常用的最多的就是在子线程进行各种耗时操作,然后发送到主线程进行,这个时候我们就是需要进行进程切换。

subscribeOn(),只有在第一次调用的时候生效,之后不管调用多少次,只会以第一次为准.
observeOn(),可以被调用多次,每次调用都会更改线程.

操作符

前面switcher.subscribe(light);是被观察者 .subscribe 观察者,而我们的操作符是创建者模式的链式调用,返回的对象也是被观察者,所以用操作符链式调用代替前面的写法,看下面代码。

//这就是RxJava的流式API调用
Observable.just("On","Off","On","On")
        //在传递过程中对事件进行过滤操作
         .filter(new Func1<String, Boolean>() {
                    @Override
                    public Boolean call(String s) {
                        return s!=null;
                    }
                })
        .subscribe(light);

欢迎大家关注我的简书

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值