RXjava(一)
2018-06-04 本文已影响0人
火星局
rxjava 响应式变成,自然好处多多在,这里不做更多解释。
Rxjava、RxAndroid
Rxjava : https://github.com/ReactiveX/RxJava
RxAndroid : https://github.com/ReactiveX/RxAndroid
RxAndroid 最新版本查看
这里使用的版本为:
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'io.reactivex.rxjava2:rxjava:2.1.2'
笔记
- rxjava1重要的元素
Observable 被观察者,通过create方法创造一个可被观察的序列,通过subscribe 去注册一个观察者
Observer 观察者 ,用来接收数据,作为Observable的subscribe 方法的参数
subscription 订阅 ,用于描述被观察者和观察者之间的关系,用于取消订阅和获取当前的订阅状态
onSubscribe 当订阅时,触发此接口调用,向订阅者发射数据
subscriber 实现了Observer和Subscription,只有自己才能阻止自己
UML图
image.png
2.背压
概念:
- 异步环境下产生的问题
- 发送和处理速度不统一
- 一种流速控制解决策略
3.Rxjava2
-
Observable
被观察者,不支持背压;通过Observable 创建一个可观察的序列(create方法);通过subscribe去注册一个观察者 -
Observe
观察者 ,用来接收数据,作为Observable的subscribe 方法的参数 -
Dispasable
和RxJava1的Subscription的作用相当,用于取消订阅和获取当前的订阅状态 -
OnSubscrible
ObservableOnSubscrible 和RxJava1的OnSubscrible一样, 当订阅时,触发此接口调用,向订阅者发射数据 -
Emitter
发射数据的接口和Observer的方法类似,本质是对Observer和Subscriber的包装
-
UML 图
image.png
//无背压
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> e) throws Exception {
if (!e.isDisposed()) {
e.onNext("1");
e.onNext("2");
e.onNext("3");
e.onNext("4");
e.onNext("5");
e.onNext("6");
e.onNext("7");
e.onNext("8");
e.onNext("9");
e.onNext("10");
e.onComplete();
}
}
}).subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
System.out.println("onSubscribe");
}
@Override
public void onNext(String value) {
System.out.println("onNext:" + value);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
System.out.println("onCompleted");
}
});
//有背压
Flowable.create(new FlowableOnSubscribe<String>() {
@Override
public void subscribe(FlowableEmitter<String> e) throws Exception {
if (!e.isCancelled()) {
e.onNext("test");
e.onComplete();
}
}
}, BackpressureStrategy.DROP).subscribe(new Subscriber<String>() {
@Override
public void onSubscribe(Subscription s) {
s.request(Long.MAX_VALUE);
System.out.println("onSubscribe");
}
@Override
public void onNext(String s) {
System.out.println("onNext:" + s);
}
@Override
public void onError(Throwable t) {
}
@Override
public void onComplete() {
System.out.println("onCompleted");
}
});
-
Flowable
易流动的被观察者,支持背压,通过Flowable创建一个可观察的序列(create方法),,通过subscribe去注册一个观察者 -
Subscriber
单独接口和Observer的方法类似,作为Flowable的方法的参数 -
subscription
订阅和RxJava不同,支持背压,request强制拉去的方法 -
FlowableOnSubscribe
当订阅时会触发此接口调用,在内部实际是向观察者发射数据 -
Emitter
发射数据的接口和Observer的方法类似,本质是对Observer和Subscriber的包装
-UML图
image.png