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 中有兩種觀察者模式
- Observable(被觀察者) – Observer(觀察者)
- 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