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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章