什么是rxjava?
是一种事件驱动的基于异步数据流的编程模式,整个数据流就像一条河流,它可以被观测(监听),过滤,操控或者与其他数据流合并为一条新的数据流。
三要素
- 被观察者(Observable)
- 观察者(Observer)
- 订阅(subscribe
Rxjava原理 基于 一种扩展的观察者模式的响应式编程框架
RxJava原理可总结为:被观察者 (Observable) 通过 订阅(Subscribe) 按顺序发送事件 给观察者 (Observer), 观察者(Observer) 按顺序接收事件 & 作出对应的响应动作
Rxjava的扩展观察者模式中有4个角色:
使用
Observable.create(new ObservableOnSubscribe()) //创建一个事件流,参数是我们创建的一个事件源
.map(...)//有时我们会需要使用操作符进行变换
.subscribeOn(Schedulers.io())//指定事件源代码执行的线程
.observeOn(AndroidSchedulers.mainThread())//指定订阅者代码执行的线程
.subscribe(new Observer())//参数是我们创建的一个订阅者,在这里与事件流建立订阅关系
Observable.create(new ObservableOnSubscribe<String>() {
//1.创建被观察者 & 生产事件
@Override
public void subscribe(ObservableEmitter<String> emitter) throws Exception {
emitter.onNext("2");
emitter.onNext("1");
emitter.onNext("3");
emitter.onComplete();
}
}).subscribe(new Observer<String>() {
//2.通过订阅(subscribe)连接观察者和被观察者
//3.创建观察者 & 定义响应事件行为
/**
* 默认最先调用复写的 onSubscribe()
* @param d
*/
@Override
public void onSubscribe(Disposable d) {
Log.i("TAG", "开始采用subscribe连接---默认最先调用复写的 onSubscribe()");
}
@Override
public void onNext(String s) {
Log.i("TAG", "对Next事件 " + s + " 作出响应");
}
@Override
public void onError(Throwable e) {
Log.i("TAG", "对Error事件作出响应");
}
@Override
public void onComplete() {
Log.i("TAG", "对Complete事件作出响应");
}
});
操作符
-
创建操作符 :创建被观察者(Observable)对象&发送事件
-
转换操作符:变换被观察者(Observable)发送的事件。将Observable发送的数据按照一定的规则做一些变换,然后再将变换的数据发射出去。变换的操作符有map,flatMap,concatMap,switchMap,buffer,groupBy等等。
-
合并操作符:组合多个被观察者(Observable)&合并需要发送的事件。包含:concatMap(),concat(), merge(),mergeArray(),concateArray(),reduce(),collect(),startWith(),zip(),count()等
-
功能操作符:辅助被观察者(Observable) 发送事件时实现一些功能性需求,如错误处理,线程调度。
-
过滤操作符:用于将Observable发送的数据进行过滤和选择。让Observable返回我们所需要的数据。过滤操作符有buffer(),filter(),skip(),take(),skipLast(),takeLast(),throttleFirst(),distainctUntilChange()。