参考学习:http://blog.csdn.net/starsliu/article/details/51038275
RxAndroid 源码解析一
被观察者(主题,订阅内容执行者)
Observable 类
OnSubscribe 继承 extends Action1
Action1 extends Action
Action extends Function
观察者(事件,订阅事件)
Observer 接口
Subscriber 实现 implements Observer
撸代码
Observable 类核心代码
public final static Observable just(finalTvalue) {
return ScalarSynchronousObservable.create(value);
}
ScalarSynchronousObservable 类核心代码
public final classScalarSynchronousObservable extends Observable {
public static final ScalarSynchronousObservable create(T t) {
return newScalarSynchronousObservable(t);
}
private final T t;
protected ScalarSynchronousObservable(finalT t) {
//都会构造一个OnSubscribe,通过这个来传递参数t,调用本事的方法call(),调用参数订阅者方法
super(new OnSubscribe() {
@Override
public void call(Subscriber s) {
s.onNext(t);
s.onCompleted();
}
});
this.t= t;
}
再回到Observable 类核心代码
public final Subscription subscribe(final Action1 onNext) {
if(onNext ==null) {
throw newIllegalArgumentException("onNext can not be null");
}
//看重点吧Action1封装通过观察者Subscriber来调用
return subscribe(new Subscriber() {
@Override
public final void onCompleted() {
}
@Override
public final void onError(Throwable e) {
throw new OnErrorNotImplementedException(e);
}
@Override
public final void onNext(Targs) {
onNext.call(args);
}
});
}
public final Subscription subscribe(Subscriber subscriber) {
return Observable.subscribe(subscriber,this);
}
private static Subscription subscribe(Subscriber subscriber, Observable observable) {
try{
//本处只显示核心代码
hook.onSubscribeStart(observable, observable.onSubscribe).call(subscriber);
return hook.onSubscribeReturn(subscriber);
RxJavaObservableExecutionHook类核心代码
public abstract class RxJavaObservableExecutionHook {
public OnSubscribe onSubscribeStart(Observable observableInstance,finalOnSubscribe onSubscribe) {
// pass-thru by default
return onSubscribe;
}
总结:最好发现是OnSubscribe(action)-----》Subscriber(action)
第一次用简书写文字,程序员有什么好的写文字啊,看到推荐下啊,这个代码显示太难看了
网友评论