參考學(xué)習(xí):http://blog.csdn.net/starsliu/article/details/51038275
RxAndroid 源碼解析一
被觀察者(主題袍睡,訂閱內(nèi)容執(zhí)行者)
Observable 類
OnSubscribe? 繼承 extends Action1
? ? ? ? ? ? ? ? ? ? Action1? extends Action
? ? ? ? ? ? ? ? ? Action? extends ?Function
觀察者(事件磅叛,訂閱事件)
Observer ?接口
Subscriber 實現(xiàn) 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) {
? ? ? ? ? ?//都會構(gòu)造一個OnSubscribe签则,通過這個來傳遞參數(shù)t,調(diào)用本事的方法call(),調(diào)用參數(shù)訂閱者方法
? ? ? ? ? ? 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來調(diào)用
? ? ? ? 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;
}
總結(jié):最好發(fā)現(xiàn)是OnSubscribe(action)-----》Subscriber(action)
第一次用簡書寫文字冰垄,程序員有什么好的寫文字啊掏熬,看到推薦下啊,這個代碼顯示太難看了