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