目录
1.RxJava 3
JavaDoc
http://reactivex.io/RxJava/3.x/javadoc/
添加依赖
implementation 'io.reactivex.rxjava3:rxjava:3.x.y'
implementation 'io.reactivex.rxjava3:rxandroid:3.x.y'
Java 8(来源于官方文档)
由于Android运行时支持方面的落后,RxJava 长期基于Java 6 API。未来的 Android Studio 4中,一个叫做 desuging 的过程能够将许多Java 7和8的特性,透明地转换成与 Java 6兼容的特性。
So,RxJava3的baseline可以提高到 Java 8,并增加Java 8的官方支持,比如:Optional、Stream等,因此必须将项目的编译目标设置更改为 java8:
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
RxJava 3.0遵循Reactive-Streams specification规范。
2.观察者模式组合
在RxJava 3中,提供了五对观察者模式组合,每一对组合依靠其可调用的一系列函数的差异,具有各自的特点。
第一组:Observable(ObservableSource)/ Observer
一次可发送单条数据或者数据序列onNext,可发送完成通知onComplete或异常通知onError,不支持背压。
第二组:Publisher(Flowable)/ Subscriber(FlowableSubscriber)
第一组基础上进行改进,发送0到N个的数据(onNext),支持Reactive-Streams和背压,可发送完成通知onComplete或异常通知onError,但效率没有第一组高。
第三组:Single(SingleSource) / SingleObserver
第一组简化版,只能发送单条数据onSuccess,或者异常通知onError
第四组:Completable(CompletableSource)/ CompletableObserver
第一组简化版,不能发送数据,只发送完成通知onComplete或者异常通知onError
第五组:Maybe(MaybeSource) / MaybeObserver
第三,第四组的合并版,只能发送单条数据onSuccess和完成通知onComplete或者发送一条异常通知onError
3.Flowable(数据源类一)
3.1.Flowable
Flowable是RxJava2.x中新增的,专门用于应对背压(Backpressure)问题,在Observable的基础上优化后的产物。
Observable ——> subscribe() ——> Observer
Flowable ——> subscribe() ——> Subscriber
后者是前者针对背压问题的优化产物,前者运行效率更高,后者支持背压问题处理,但逻辑更多,运行效率稍低,速度稍慢。
Flowable数据流程:Flowable ——> 异步缓存池(128)——> Subscriber
Flowable默认异步缓存队列大小为128。作用是缓存当前未来得及处理(Subscriber未接收,或者由于某种原因,Flowable未实际发送给Subscriber)的数据。也就是说随着Subscriber对数据的接收处理,缓存池也会随之做清理更新:去掉已经被Subscriber接收的,塞进Flowable新发送的。
注意:并不是Subscriber接收一条,便清理一条,而是存在一个延迟,等累积一段时间后统一清理一次。
所以:当生产者和消费者在相同的线程中;或者当生产者和消费者在不同线程中,但消费者消费数据的速度不低于生产者发送数据的速度,或者整条数据流中只有一条数据时 …… 使用Observable会更好。
Flowable
.create(new FlowableOnSubscribe<Integer>() {
@Override
public void subscribe(FlowableEmitter<Integer> e) throws Exception {
System.out.println("发送----> 1");
e.onNext(1);
System.out.println("发送----> 2");
e.onNext(2);
System.out.println("发送----> 3");
e.onNext(3);
System.out.println("发送----> 完成");
e.onComplete();
}
}, BackpressureStrategy.BUFFER) //指定背压处理策略:缓存
.subscribeOn(Schedulers.newThread())
.observeOn(Schedulers.newThread())
.subscribe(new Subscriber<Integer>() {
@Override
public void onSubscribe(Subscription s) {
s.request(Long.MAX_VALUE); // 响应式拉取
}
@Override
public void onNext(Integer integer) {
System.out.println("接收----> " + integer);
}
@Override
public void onError(Throwable t) {}
@Override
public void onComplete() {
System.out.println("接收----> 完成");
}
});
注意:
(1)BackpressureStrategy.BUFFER设置背压处理策略
(2)