美文网首页
RxJava1执行分析1

RxJava1执行分析1

作者: lyzaijs | 来源:发表于2018-02-13 10:58 被阅读22次

版本:RxJava1.3.0
主要分析subscribe()实现方式和原理。(过程在会涉及到操作符等,例如map...) 都知道Rx敲代码很爽快,主要归功于它可以将一个业务可以链式的实现(丰富的操作符)和方便线程调度

这里主要分析链式的实现

关键点: Observable OnSubscribe subscribe subscriber(Observer)
一句话串联,即:观察者(subscriber|observer)订阅(subscribe)消息(被观察者 Observable OnSubscribe )

示例:

Observable.create(new Observable.OnSubscribe<String>() {
            @Override
            public void call(Subscriber<? super String> subscriber) {
                subscriber.onNext("goods");
                subscriber.onCompleted();
            }
        })
                .subscribe(new Action1<String>() {
                    @Override
                    public void call(String s) {
                        System.out.println(s);
                    }
                });

但是我们常用的一般是Action1并不上面提到的subscriber,原来是已经封装成ActionSubscriber

    public final Subscription subscribe(final Action1<? super T> onNext) {
        ...
         Action1<Throwable> onError = InternalObservableUtils.ERROR_NOT_IMPLEMENTED;
        Action0 onCompleted = Actions.empty();
        return subscribe(new ActionSubscriber<T>(onNext, onError, onCompleted));
    }

继续往下找subscribe的最终实现:

public final Subscription subscribe(Subscriber<? super T> subscriber) {
        return Observable.subscribe(subscriber, this);
}

static <T> Subscription subscribe(Subscriber<? super T> subscriber, Observable<T> observable) {
     ...
        subscriber.onStart();
        if (!(subscriber instanceof SafeSubscriber)) {
            // assign to `observer` so we return the protected version
            subscriber = new SafeSubscriber<T>(subscriber);
        }
        ...
        try {
            RxJavaHooks.onObservableStart(observable, observable.onSubscribe).call(subscriber);
            return RxJavaHooks.onObservableReturn(subscriber);
        } catch (Throwable e) {
            ...
            }
            return Subscriptions.unsubscribed();
        }
    }

关键点 RxJavaHooks.onObservableStart(observable, observable.onSubscribe).call(subscriber);(这里可以将代码简化为 observable.onSubscribe.call(subscriber))这行对以上所谓的 观察、订阅进行了串联。即你在create(OnSubscribe)中进行的onNext操作的对象就是Action1(即ActionSubscriber)。

有了以上基础,下面再来加入map操作符(这里才是重中之重)

相关文章

  • RxJava1执行分析1

    版本:RxJava1.3.0主要分析subscribe()实现方式和原理。(过程在会涉及到操作符等,例如map.....

  • RxJava1执行分析2 - map

    书接上文《RxJava1执行分析1》,这里主要分析加入操作符map的执行流程: 示例2 map的源码: 这里可以发...

  • rxjava1-map操作符源码分析

    rxjava1 map操作符分析 由于源码版本不同,可能会有所差别 代码执行流程分析 create:创建一个新的O...

  • RxJava1源码分析

    我对于RxJava的异常处理和上抛方式有一些不解,而上网查找的文章都是RxJava的一些用于处理异常的操作符,所以...

  • Android RxJava1 升级到 RxJava2

    1.由于RxJava1 和 RxJava2 同时引用会导致rxjava的jar包冲突,所以RxJava1和RxJa...

  • Retrofit 与 RxJava 结合使用出现的异常处理

    RxJava1 与 RxJava2 RxJava 有 RxJava1 和 RxJava2,两者不能共存。 如果AP...

  • 基础

    注:本文分析的是RxJava 2.0.0 阅读之前,希望你对RxJava1已经有所了解。首先了解几个基本接口 和第...

  • RxJava1中线程调度分析

    Java开发过程中都会碰到异步任务,通常通过回调的方式来实现。但是业务一旦复杂,会使回调的书写很麻烦。(所谓回调地...

  • rxjava1基本元素源码分析

    代码示例 常用类说明 被观察者 rx.Observable 订阅 rx.Subscription 观察者 rx.O...

  • 18.RxJava与Retrofit

    一、RxJava1,基本用法创建 Observable、创建 Observer、 SubscribeObserva...

网友评论

      本文标题:RxJava1执行分析1

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