基本用法:
Disposable mDisposable;
mDisposable=Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(@NonNull ObservableEmitter<String> e) throws Throwable {
e.onNext("1");
e.onNext("2");
e.onNext("3");
e.onNext("4");
e.onComplete();
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<String>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
}
@Override
public void onNext(@NonNull String s) {
Log.e(TAG, "onNext: " + s);
}
@Override
public void onError(@NonNull Throwable e) {
}
@Override
public void onComplete() {
}
});
//销毁1
Ondestory(){
mDisposable.dispos()
}
//销毁2 或
private static CompositeDisposable mRxEvent = new CompositeDisposable();
mRxEvent.add(subscribe);
mRxEvent.clear();
RxAndroid 观察者模式 响应式编程
'io.reactivex.rxjava3:rxandroid:3.0.0'
'io.reactivex.rxjava3:rxjava:3.0.0'
https://blog.csdn.net/weixin_42046829/article/details/104833751
所有类型
- Observable:最基本的响应类型,不支持背压
- Flowable:最基本的响应类型,支持背压
- Single:只发射一个数据的响应类型
- Completable:只发射一个信号的响应类型
- Maybe:Single和Completable的结合体
1.创建
创建被观察者
Observable.create(new ObservableOnSubscribe<String>{
},//创建观察者订阅 subscribe(new Observer<String>(){}))
2切换线程
/将被观察者切换到子线程 .subscribeOn(Schedulers.io())
//将观察者切换到主线程行 .observeOn(AndroidSchedulers.mainThread())
- Private static CompositeDisposable mRxEvent = new CompositeDisposable();
- Disposable subscribe = Observable.create(new ObservableOnSubscribe<String>() {
- mRxEvent.add(subscribe);
- mRxEvent.clear();
操作符:
1.创建操作符
- create():创建最简单的事件流
- from():创建事件流,可发送不同类型的数据流
- just():创建事件流,可发送多个参数的数据流
- defer():创建事件流,可缓存可激活事件流
- range():创建事件流,可发送范围内的数据流
- interval():创建延时重复的事件流
- repeat():创建可重复次数的事件流
- timer():创建一次延时的事件流
- interval():用于创建事件流,周期性重复发送
- timer():用于创建事件流,延时发送一次
- delay():用于事件流中,可以延时某次事件流的发送
2.转换操作符
- map():对数据流的类型进行转换
- flatMap():对数据流的类型进行包装成另一个数据流
- scan():对上一轮处理过后的数据流进行函数处理
- groupBy():对所有的数据流进行分组
- buffer():缓存发射的数据流到一定数量,随后发射出数据流集合
- window():缓存发射的数据流到一定数量,随后发射出新的事件流
3.过滤操作符
- debounce():事件流只发射规定范围时间内的数据项
- distinct():事件流只发射不重复的数据项
- elementAt():事件流只发射第N个数据项
- filter():事件流只发射符合规定函数的数据项
- first():事件流只发射第一个数据项
- last():事件流只发射最后一项数据项
- ignoreElements():忽略事件流的发射,只发射事件流的终止事件
- sample():事件流对指定的时间间隔进行数据项的采样
- skip():事件流忽略前N个数据项
- skipLast():事件流忽略后N个数据项
- take():事件流只发射前N个数据项
- takeLast():事件流只发射后N个数据项
4.组合操作符
- merge()/concat():无序/有序的合并两个数据流
- zip():两个数据流的数据项合并成一个数据流一同发出
- startWith():将待合并的数据流放在自身前面一同发出
- join():将数据流进行排列组合发出,不过数据流都是有时间期限的
- combineLatest():合并最近发射出的数据项成数据流一同发出
5.错误处理操作符
- onErrorReturn():当错误发生时,它会忽略onError的回调且会发射一个新的数据项并回调onCompleted()
- onErrorResumeNext():当错误发生时,它会忽略onError的回调且会发射一个新的事件流并回调onCompleted()
- onExceptionResumeNext():当错误发生时,如果onError收到的Throwable不是一个Exception,它会回调onError方法,且不会回调备用的事件流,如果onError收到的Throwable是一个Exception,它会回调备用的事件流进行数据的发射
- retry():当错误发生时,发射器会重新发射
- retryWhen():当错误发生时,根据Tharowble类型决定发射器是否重新发射
6.辅助性操作符
- delay():延迟事件发射的数据项
- do():监听事件流的生命周期
- materialize()/dematerialize():对事件流进行装箱/拆箱
- serialize():同步事件流的发射
- timeInterval():对事件流增加时间间隔
- timeout():对事件流增加限定时间
- timestamp():对事件流增加时间戳
- using():对事件流增加一次性的资源
- to():对数据流中的数据项进行集合的转换
7.条件和布尔操作符
- all():对所有数据项进行校验
- contains():所有数据项是否包含指定数据项
- amb():多个事件流中,只发射最先发出的事件流
- defaultIfEmpty():如果数据流为空则发射默认数据项
- sequenceEqual():判断两个数据流是否完全相等
- skipUntil():当两个事件流发射时,第一个事件流的数据项会等到第二个事件流开始发射时才进行发射
- skipWhile():当发射的数据流达到某种条件时,才开始发射剩余所有数据项
- takeUntil():当两个事件流发射时,第一个事件流的数据项会等到第二个事件流开始发射时终止发射
- takeWhile():当发射的数据流达到某种条件时,才停止发射剩余所有数据项
8.数学运算及聚合操作符
数学运算操作符的使用需要在gradle中添加rxjava-math的依赖
implementation 'io.reactivex:rxjava-math:1.0.0'
- 1
- average():求所有数据项的平均值
- max/min():求所有数据项的最大或最小值
- sum():求所有数据项的总和
- reduce():对上一轮处理过后的数据流进行函数处理,只返回最后的结果
- collect():对上一轮处理过后的数据流进行函数处理,可改变原始的数据结构
9.连接操作符
- publish():将普通的事件流转换成可连接的事件流
- connect():将可连接的事件流进行连接并发射数据
- refCount():将可连接的事件流转换成普通的事件流
- replay():缓存可连接的事件流中的所有数据项
基本用法:
Disposable mDisposable;
mDisposable=Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(@NonNull ObservableEmitter<String> e) throws Throwable {
e.onNext("1");
e.onNext("2");
e.onNext("3");
e.onNext("4");
e.onComplete();
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<String>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
}
@Override
public void onNext(@NonNull String s) {
Log.e(TAG, "onNext: " + s);
}
@Override
public void onError(@NonNull Throwable e) {
}
@Override
public void onComplete() {
}
});
//销毁1
Ondestory(){
mDisposable.dispos()
}
//销毁2 或
private static CompositeDisposable mRxEvent = newCompositeDisposable();
mRxEvent.add(subscribe);
mRxEvent.clear();