フロアブルは、プロセス記述をサブスクライブ

転載、リンクなどのソースを明記してください:
:この記事はから来て103styleさんのブログ

購読のフロアブル方法

public final Disposable subscribe() {
    return subscribe(Functions.emptyConsumer(), Functions.ON_ERROR_MISSING,
            Functions.EMPTY_ACTION, FlowableInternalHelper.RequestMax.INSTANCE);
}

public final Disposable subscribe(Consumer<? super T> onNext) {
    return subscribe(onNext, Functions.ON_ERROR_MISSING,
            Functions.EMPTY_ACTION, FlowableInternalHelper.RequestMax.INSTANCE);
}

public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError) {
    return subscribe(onNext, onError, Functions.EMPTY_ACTION,
            FlowableInternalHelper.RequestMax.INSTANCE);
}

public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError,
                                  Action onComplete) {
    return subscribe(onNext, onError, onComplete,
            FlowableInternalHelper.RequestMax.INSTANCE);
}

public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError,
                                  Action onComplete, Consumer<? super Subscription> onSubscribe) {
    LambdaSubscriber<T> ls = new LambdaSubscriber<T>(onNext, onError, onComplete, onSubscribe);
    subscribe(ls);
    return ls;
}

public final void subscribe(Subscriber<? super T> s) {
    if (s instanceof FlowableSubscriber) {
        subscribe((FlowableSubscriber<? super T>)s);
    } else {
        ObjectHelper.requireNonNull(s, "s is null");
        subscribe(new StrictSubscriber<T>(s));
    }
}

public final void subscribe(FlowableSubscriber<? super T> s) {
    ObjectHelper.requireNonNull(s, "s is null");
    try {
        Subscriber<? super T> z = RxJavaPlugins.onSubscribe(this, s);
        subscribeActual(z);
    } catch (...) {
       ...
    }
}

protected abstract void subscribeActual(Subscriber<? super T> s);

最初の4つの方法がデフォルトで呼び出されます。

  • Functions.emptyConsumer()
    static final class EmptyConsumer implements Consumer<Object> {
        @Override
        public void accept(Object v) { }
    
        @Override  
        public String toString() {
            return "EmptyConsumer";
        }
    }
    
  • Functions.ON_ERROR_MISSING
    static final class OnErrorMissingConsumer implements Consumer<Throwable> {
        @Override
        public void accept(Throwable error) {
            RxJavaPlugins.onError(new OnErrorNotImplementedException(error));
        }
    }
    
  • Functions.EMPTY_ACTION
    static final class EmptyAction implements Action {
        @Override
        public void run() { }
    
        @Override
        public String toString() {
            return "EmptyAction";
        }
    }
    
  • FlowableInternalHelper.RequestMax.INSTANCE
    public enum RequestMax implements Consumer<Subscription> {
        INSTANCE;
        @Override
        public void accept(Subscription t) throws Exception {
            t.request(Long.MAX_VALUE);
        }
    }
    

呼び出してsubscribe(onNext, onError, onComplete, onSubscribe)、その後、4つのパラメータにパッケージ化LambdaSubscriberより優先され、子クラスのオブジェクトsubscribeActualメソッドを。

そしてsubscribe(Subscriber<? super T> s)、自身の送信することによって達成されるFlowableSubscriberインターフェースまたは転送Subscriberするように構成されたStrictSubscriberオーバーライドサブクラス転送subscribeActual方法を。

そしてために、次のプロセスの分析Rxjavaのソースオペレータを作成するには、同様に記述しました。

上記。

ます。https://www.jianshu.com/p/0aa24c3ccb4fで再現

おすすめ

転載: blog.csdn.net/weixin_34026484/article/details/91052813