首先看一个小例子:
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> e) throws Exception {
// e.onNext("1024");
// e.onComplete();
}
}).map(new Function<String, Integer>() {
@Override
public Integer apply(String s) throws Exception {
return Integer.parseInt(s);
}
}).map(new Function<Integer, Float>() {
@Override
public Float apply(Integer integer) throws Exception {
return Float.parseFloat(String.valueOf(integer));
}
}).subscribe(new Observer<Float>() {
@Override
public void onSubscribe(Disposable d) {
Log.e(TAG, "onSubscribe: =============ddddd" );
}
@Override
public void onNext(Float integer) {
Log.e(TAG, "onNext: ======>>"+integer );
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
Observable.create->获得ObservableCreate(将ObservableOnSubscribe传进来赋值给source)对象
->map(获得ObservableMap对象(把ObservableCreate对象穿进来,赋值给当前ObservableMap 的source) 我们暂且叫该对象为map1)
->map(获得ObservableMap对象(把bservableMap对象穿进来,赋值给当前ObservableMap 的source),我们暂且叫该对象为map2)
->subscribe()
->map2对象的subscribe,(ObservableMap中 subscribe方法是层层往上调用的 source.subscribe(new MapObserver<T, U>(t, function));
同时将素MainActivity subscribe 中new 的Observer 赋值给MapObserver这样层层往上赋值,最终,ObservableCreate中的Observer 是从map1中new的MapObserver穿进来的
-> map1对象的subscribe
-> ObservableCreate对象的 subscribe方法,
->上游事件开始层层往下调用,最后最上游的 Observable 肯定会调用 onNext 方法,这样递归往下游就会来到包裹好的 MapObserver 中的 onNext 方法,
在这里我们看到了 function.apply(item) 进行转换处理,然后接着往下传递,最终就会来到 Observer 的 onNext 方法。