Android学习笔记——RxJava2基本使用

笔记尚未完成,需更新

依赖

//RxJava2
    implementation 'io.reactivex.rxjava2:rxjava:2.0.2'
    implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'

使用方法

观察者与被观察者

observable ——被观察者, 可理解为一个绑定了事件Listener的View,被观察者通过使用发射器传递数据到订阅对象,也可以说是观察者,通过观察者接受数据对数据进行操作(一般是更新UI), 一般用于异步处理操作(网络数据获取或文件io流

被观察者使用以下方法创建对象

泛型的数据类型根据需要传递的数据类型自己选择

Observable.create( ObservableOnSubscribe<T> )

Observable.create(new ObservableOnSubscribe<Integer>() {
    @Override
    public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
        emitter.onNext(1);
        emitter.onNext(2);
        emitter.onNext(3);
    }

});

subcribe方法的调用,是在有订阅时才会调用,当订阅( 被观察者对象调用subcribe() 方法 observable.subcribe(简化订阅 or 观察者对象observer ) )后,会开始调用此处的subscribe方法,在 观察者 的 onSubcribe之后运行

也就是,当订阅完成时,此处代码的顺序会是

    观察者 的 onSubcribe

    被观察者的 subcribe

    当发射器 noNext 后

    会先调用doOnNext (当观察者有调用并实现doOnNext时

    然后调用map(当观察者有调用并实现map时, 该方法作用是在数据到达观察者处前修改数据或数据类型并返回数据

    最后数据到达观察者的 onNext 方法,在此处对UI进行更新

emitter为发射器对象,可通过发射器对象调用onNext方法来传递数据

emitter有以下几个方法

onNext 传递数据

onError 抛出错误,当抛出错误时,还在事件消息队列中的将不做处理。只能抛出一次错误!!

onComplete 当前事件已完成,还在事件消息队列中的将不做处理

tryOnError  尝试抛出错误

在观察者中,有相对应的方法来响应发射器发出的事件信号

在简化的订阅中,有 accept 方法来对发射器的 onNext 方法做出响应

observer —— 观察者, 类似Qt的槽,会对被观察者发过来的事件进行响应。被观察者通过发射器调用onNext 方法传递数据,观察者接收到事件信号会调用noNext 方法针对数据完成操作(一般都会把订阅对象,也就是观察者角色的处理放在主线程,一般用于UI更新的操作

观察者的创建

Observer<Integer> observer = new Observer<Integer>() {
    @Override
    public void onSubscribe(Disposable d) {

    }

    @Override
    public void onNext(Integer integer) {
        Log.i("onNext", String.valueOf(integer));
    }

    @Override
    public void onError(Throwable e) {

    }

    @Override
    public void onComplete() {

    }
};

onSubscribe 是 在订阅绑定完成时 会调用的方法

onComplete 是 在事件消息队列完成任务时 会调用的方法

                      发射器无调用时,并不触发该方法

onNext 当发射器调用onNext方法传递数据后,观察者接收数据,并调用方法

onError 当发射器调用onError发出错误消息时,观察者接收异常信息,并调用方法

订阅

订阅的操作,触发观察者 onSubscribe 方法被观察者 subscribe  方法

observable.subscribe(observer);

简化之后的写法

Observable.create(new ObservableOnSubscribe<Integer>() {
    @Override
    public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
        Log.i("subscribe", "subscribe");
        emitter.onNext(1);
        emitter.onNext(2);
        emitter.onNext(3);
    }
}).subscribe(new Observer<Integer>() {
    @Override
    public void onSubscribe(Disposable d) {
        Log.i("onSubscribe", "onSubscribe");
    }

    @Override
    public void onNext(Integer integer) {
        Log.i("onNext", String.valueOf(integer));
    }

    @Override
    public void onError(Throwable e) {

    }

    @Override
    public void onComplete() {

    }
});

简化订阅

Consumer 用于接收单个值,并进行处理

Function 用于变换对象,例如 在map中,将一个数据进行处理,并返回其他类型的数据

observable.map(new Function<Integer, String>() {
    @Override
    public String apply(Integer integer) throws Exception {
        Log.i("map", String.valueOf(integer * 2));
        
        return integer + "--String";
    }
});

BiConsumer 接收两个值,并进行处理

Predicate 用于判断

线程操作

内置线程

Schedulers.io()  代表io操作的线程, 通常用于网络,读写文件等io密集型的操作;

Schedulers.computation() 代表CPU计算密集型的操作, 例如需要大量计算的操作;

Schedulers.newThread() 代表一个常规的新线程;

AndroidSchedulers.mainThread() 代表Android的主线程

猜你喜欢

转载自blog.csdn.net/qq_15710245/article/details/99313078