rxjava是响应式编程思想在java语言的实现。要理解它,你只要把握住两点就可以,观察者模式和异步。
观察者模式
observable 被观察者
Observable switcher=Observable.create(new Observable.OnSubscribe(){}
其中还会有just和from的写法。
observer 观察者
在rxjava中Subscriber是观察者的实现类,类似的还有action类(参数个数)
订阅
由于被观察者产生事件,是事件的起点,那么开头就是用Observable这个主体调用来创建被观察者,产生事件,为了保证流式API调用规则,就直接让Observable作为唯一的调用主体,一路调用下去。这点区别于传统的观察者的写法。
流程图如下
流程图代码实现如下
//创建被观察者,是事件传递的起点
Observable.just("On","Off","On","On")
//这就是在传递过程中对事件进行过滤操作
.filter(new Func1() {
@Override
public Boolean call(String s) {
return s!=null;
}
})
//实现订阅
.subscribe(
//创建观察者,作为事件传递的终点处理事件
new Subscriber() {
@Override
public void onCompleted() {
Log.d("DDDDDD","结束观察...\n");
}
@Override
public void onError(Throwable e) {
//出现错误会调用这个方法
}
@Override
public void onNext(String s) {
//处理事件
Log.d("DDDDD","handle this---"+s)
}
);
rxjava的骨架
创建被观察者,产生事件
设置事件传递过程中的过滤,合并,变换等加工操作。
订阅一个观察者对象,实现事件最终的处理
Tips: 当调用订阅操作(即调用Observable.subscribe()方法)的时候,被观察者才真正开始发出事件。
rxjava操作符
操作符是rxjava的精华所在,可以在事件传递单位过程中做很多事情。
map
比如被观察者产生的事件中只有图片文件路径;,但是在观察者这里只想要bitmap,那么就需要类型变换。
Observable.just(getFilePath()
//使用map操作来完成类型转换
.map(new Func1() {
@Override
public Bitmap call(String s) {
//显然自定义的createBitmapFromPath(s)方法,是一个极其耗时的操作
return createBitmapFromPath(s);
}
})
.subscribe(
//创建观察者,作为事件传递的终点处理事件
new Subscriber() {
@Override
public void onCompleted() {
Log.d("DDDDDD","结束观察...\n");
}
@Override
public void onError(Throwable e) {
//出现错误会调用这个方法
}
@Override
public void onNext(Bitmap s) {
//处理事件
showBitmap(s)
}
);
flatmap
异步
实际上线程调度只有subscribeOn()和observeOn()两个方法。对于初学者,只需要掌握两点:
subscribeOn()它指示Observable在一个指定的调度器上创建(只作用于被观察者创建阶段)。只能指定一次,如果指定多次则以第一次为准
observeOn()指定在事件传递(加工变换)和最终被处理(观察者)的发生在哪一个调度器。可指定多次,每次指定完都在下一步生效。
总结
它就是在观察者模式的骨架下,通过丰富的操作符和便捷的异步操作来完成对于复杂业务的处理。