正文
本篇文章我把Observable称为“节点”,Observer称为“处理者”,一是因为我被观察者、被观察者、谁订阅谁给绕晕了,更重要的是我觉得这个名称比较符合Rxjava的设计思想。
Observable调用create方法创建一个自己,重写subscribe方法说:如果 我有一个处理者Observer,我就把“hello”,“world”交给它处理。
Observable调用了subscribe方法,真的找到了Observer。于是兑现承诺,完成整个调用逻辑。
这里是“如果”有处理者,需要subscribe方法被调用时,“如果”才成立。Rxjava就是建立在一系列的“如果”(回调)操作上的。
“nullMap”操作符(核心)
1、创建一个observable
2、调用空map操作符做变换
3、交给observer处理
MainActivity.java
Observable.create(new Observable() {
@Override
public void subscribe(Observer observer) {
observer.onNext("hello");
observer.onNext("world");
observer.onComplete();
}
})
.nullMap()
.subscribe(new Observer() {
@Override
public void onNext(String s) {
Log.e("yxj",s);
}
@Override
public void onComplete() {
Log.e("yxj","onComplete");
}
});
nullMap()等价于 下面这段代码。
即把上个节点的数据不做任何修改的传递给下一节点的map操作
.map(new Function<String, String>() {
@Override
public String apply(String s) throws Exception {
return s;
}
})
"nullMap"操作符在Rxjava源码里并不存在
,是我方便大家理解Rxjava运行机制写出来的。
因为nullMap操作是一个
base变换操作
,map,flatMap,subscribeOn,observeOn操作符都是在nullMap上修改而来。所以Rxjava的变换的基础就是nullMap操作符。
Observable.java
// 这就是Rxjava的变换核心
public Observable nullMap() {
return new Observable() {
@Override
public void subscribe(final Observer observerC) {
Observer observerB = new Observer() {
@Override
public void onNext(T t) {
observerC.onNext(t);
}
@Override
public void onComplete() {
observerC.onComplete();
}
};
Observable.this