RxJava2.0使用

RxJava 2.0 使用

引用

    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
    compile 'io.reactivex.rxjava2:rxjava:2.0.1'
   //RxBinding 使用
    compile 'com.jakewharton.rxbinding2:rxbinding:2.0.0'
    compile 'com.jakewharton.rxbinding2:rxbinding-support-v4:2.0.0'
    compile 'com.jakewharton.rxbinding2:rxbinding-appcompat-v7:2.0.0'

在RxJava 2.0 中有两种观察者模式

  1. Observable(被观察者) – Observer(观察者)
  2. Flowable(被观察者) – Subscriber(观察者)

关于背压的概念

  • 关于支持背压和不支持背压
    RxJava2.X中,Observeable用于订阅Observer,是不支持背压的,而Flowable用于订阅Subscriber,是支持背压(Backpressure)的

  • 什么是背压
    背压是指在异步场景中,被观察者发送事件速度远快于观察者的处理速度的情况下,一种告诉上游的被观察者降低发送速度的策略

  • 什么是不支持背压
    当被观察者快速发送大量数据时,下游不会做其他处理,即使数据大量堆积,调用链也不会报MissingBackpressureException,消耗内存过大只会OOM
    所以,当我们使用Observable/Observer的时候,我们需要考虑的是,数据量是不是很大(官方给出以1000个事件为分界线)

这里写图片描述

使用

一 、Observable/Observer使用步骤:

  • 1.创建被观察者
 Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(ObservableEmitter<String> e) throws Exception {
                //通知观察者
                e.onNext("通知观察者");
            }
        });
  • 2.创建观察者
Observer observer = new Observer<String>() {
           //RxJava 2.0 中新增的,传递参数为Disposable ,Disposable 相当于RxJava1.x中的Subscription,用于解除订阅。
            @Override
            public void onSubscribe(Disposable d) {

            }

            //观察者接收到通知,进行相关操作
            @Override
            public void onNext(String o) {
                Log.d("","接收到观察者发出的数据");
            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onComplete() {

            }
        };
  • 3.订阅,将被观察者和观察者关联上
 observable.subscribe(observer);

Flowable/Subscriber使用步骤

/**
     * Flowable/Subscriber
     */
    private void observable2() {
        //1.创建被观察者
        Flowable flowable = Flowable.range(0, 10);

        //2.创建观察者
        Subscriber subscribe = new Subscriber<Integer>() {
            Subscription sub;

            //当订阅后,会首先调用这个方法,其实就相当于onStart(),
            //传入的Subscription s参数可以用于请求数据或者取消订阅
            @Override
            public void onSubscribe(Subscription s) {
                Log.w("TAG", "onsubscribe start");
                sub = s;
                sub.request(1);
                Log.w("TAG", "onsubscribe end");
            }

            @Override
            public void onNext(Integer o) {
                Log.w("TAG", "onNext--->" + o);
                sub.request(1);
            }

            @Override
            public void onError(Throwable t) {
                t.printStackTrace();
            }

            @Override
            public void onComplete() {
                Log.w("TAG", "onComplete");
            }
        };

        //3.订阅
        flowable.subscribe(subscribe);
    }

Flowable也可以通过creat()来创建:
Flowable虽然可以通过create()来创建,但是你必须指定背压的策略,以保证你创建的Flowable是支持背压的

//1.创建被观察者
//        Flowable flowable = Flowable.range(0, 10);
        //使用create 创建Flowable 第二个参数是指定背压策略
        Flowable flowable = Flowable.create(new FlowableOnSubscribe() {
            @Override
            public void subscribe(FlowableEmitter e) throws Exception {
                e.onNext(1);
                e.onNext(2);
                e.onNext(3);
                e.onNext(4);
                e.onComplete();
            }
        }, BackpressureStrategy.BUFFER);

注意导包

Observable --> import io.reactivex.Observable;
AndroidSchedulers --> import io.reactivex.android.schedulers.AndroidSchedulers;
Schedulers --> import io.reactivex.schedulers.Schedulers;

线程控制器的使用

这里Rx1.0 到 Rx2.0 并没有多少变化,可以参照我之前的基于Rx1.0的使用方式 这里写链接内容

改变

Rx1.0———–Rx2.0

Func1——–Function
Action1——–Consumer
Action2——–BiConsumer

发布了33 篇原创文章 · 获赞 5 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/hjiangshujing/article/details/76087147
今日推荐