美文网首页
subscribe()源码解析

subscribe()源码解析

作者: Rogge666 | 来源:发表于2017-11-19 12:44 被阅读3次

基于rxjava1.1.0

用例代码↓
    Observable<String> observable1 = Observable.create(new Observable.OnSubscribe<String>() {
        ⑤
        public void call(Subscriber<? super String> subscriber) {
            subscriber.onNext("1");
            subscriber.onCompleted();
        }
    });
    Subscriber<String> subscriber1 = new Subscriber<String>() {
        @Override
        public void onCompleted() {

        }

        @Override
        public void onError(Throwable e) {

        }

        ⑥
        @Override
        public void onNext(String s) {
            Log.e("haha",s);
        }
    };
    observable1.subscribe(subscriber1);
subscribe()源码精简版
①
public final Subscription subscribe(Subscriber<? super T> subscriber) {
        return Observable.subscribe(subscriber, this);
    }

②
private static <T> Subscription subscribe(Subscriber<? super T> subscriber, Observable<T> observable) {
          subscriber.onStart();
          ③
          hook.onSubscribeStart(observable, observable.onSubscribe).call(subscriber);
          return hook.onSubscribeReturn(subscriber);
        }
    }

④
public <T> OnSubscribe<T> onSubscribeStart(Observable<? extends T> observableInstance, final OnSubscribe<T> onSubscribe) {
        return onSubscribe;
    }

执行observable1.subscribe(subscriber1);的调用顺序为①→②→③→④→⑤→⑥
在①中this为调用它的observable1
在④中返回的是observable1.onSubscribe
在③最后执行的就是observable1.onSubscribe.call(subscriber1);
在⑤中call的参数subscriber由③赋值即在call方法里执行了subscriber1.onNext("1");
至此完结

相关文章

网友评论

      本文标题:subscribe()源码解析

      本文链接:https://www.haomeiwen.com/subject/gybuvxtx.html