Rxjava学习(一)

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();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值