Rxjava学习(一)

来源:互联网 发布:网络维护人员工作总结 编辑:程序博客网 时间:2024/06/01 08:57

Android项目中引入Rxjava

在Android中使用RxJava2非常简单, 只需要在Gradle配置:
compile 'io.reactivex.rxjava2:rxjava:2.1.0'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'

主要类介绍

Observable 被观察者(事件源),不处理背压
Observer 观察者,用于订阅Observable
Subject 继承了Observable实现了Observer,既可做观察者也可做被观察者,通常作为两者的桥梁或代理
Flowable(Publisher) 被观察者(事件源),有背压处理策略
Subscriber 观察者,用于订阅Flowable
Processor 实现类FlowableProcessor继承了Flowable实现了FlowableSubscriber,类似SubjectSingle/SingleObserver 仅发生一次消息,遵循onSubscribe(onSuccess | onError)?
Completable/CompletableObserver 仅发生一次消息,遵循onSubscribe (onComplete | onError)?
Maybe/MaybeObserver 仅发生一次消息,遵循onSubscribe (onSuccess | onError | onComplete)?
Disposable 替代了 RxJava1 中的Subscription ,实现该接口的资源具备可被取消 (dispose) 的能力
Subscription 在Subscriber订阅时回调的对象,具备拉取 (request) 和取消订阅 (cancel) 的能力

Rxjava基本使用

//创建被观察者:Observable<Integer> observable = Observable.create(new ObservableOnSubscribe<Integer>() {            @Override            public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {                emitter.onNext(1);                emitter.onNext(2);                emitter.onNext(3);                emitter.onComplete();            }        });//创建观察者:Observer<Integer> observer = new Observer<Integer>() {            @Override            public void onSubscribe(Disposable d) {                Log.d(TAG, "subscribe");            }            @Override            public void onNext(Integer value) {                Log.d(TAG, "" + value);            }            @Override            public void onError(Throwable e) {                Log.d(TAG, "error");            }            @Override            public void onComplete() {                Log.d(TAG, "complete");            }        };        //建立连接        observable.subscribe(observer);

上面的代码可以改成为下面的链式结构,这也是Rxjava的一个优点

Observable.create(new ObservableOnSubscribe<Integer>() {  @Override  public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {                emitter.onNext(1);                emitter.onNext(2);                emitter.onNext(3);                emitter.onComplete();            }        }).subscribe(new Observer<Integer>() {            @Override            public void onSubscribe(Disposable d) {                Log.d(TAG, "subscribe");            }            @Override            public void onNext(Integer value) {                Log.d(TAG, "" + value);            }            @Override            public void onError(Throwable e) {                Log.d(TAG, "error");            }            @Override            public void onComplete() {                Log.d(TAG, "complete");            }        });

在上面的代码中我们看到了两个陌生的东西,ObservableEmitter和Disposable
ObservableEmitter:Emitter是发射器的意思,那就很好猜了,这个就是用来发出事件的,它可以发出三种类型的事件,
通过调用emitter的onNext(T value)、onComplete()和onError(Throwable error)就可以分别发出next事件、complete事件和error事件。
一些注意事项:
(1)被观察者可以发送无限个onNext, 观察者也可以接收无限个onNext.
(2)当被观察者发送了一个onComplete后, 被观察者onComplete之后的事件将会继续发送, 而观察者收到onComplete事件之后将不再继续接收事件.
(3)当被观察者发送了一个onError后, 被观察者onError之后的事件将继续发送, 而观察者收到onError事件之后将不再继续接收事件.
(4)被观察者可以不发送onComplete或onError.
(5)最为关键的是onComplete和onError必须唯一并且互斥, 即不能发多个onComplete, 也不能发多个onError, 也不能先发一个onComplete, 然后再发一个onError, 反之亦然
Disposable:切断两者之间的联系,调用dispose()之后,依然会继续发射事件,但是不在接收
CompositeDisposable:用于存放Rxjava中的订阅关系,在不需要的情况下可以解除,避免造成内存泄漏CompositeDisposable compositeDisposable = new CompositeDisposable();
添加订阅关系:
@Override
public void onSubscribe(@NonNull Disposable d) {
compositeDisposable.add(d);
解除订阅关系:
compositeDisposable.clear();

原创粉丝点击