Subscriber.onStart 的正确用法

Correct usage of Subscriber.onStart

我正在考虑使用 Subscriber.onStart to show a progress indicator which is then hidden in onCompleted

private class MySubscriber extends Subscriber<Boolean> {

    @Override
    public void onCompleted() {
        mProgressBar.setVisibility(View.GONE);
    }

    @Override
    public void onError(Throwable throwable) {
        mProgressBar.setVisibility(View.GONE);
    }

    @Override
    public void onNext(Boolean aBool) {
    }

    @Override
    public void onStart() {
        mProgressBar.setVisibility(View.VISIBLE);
    }
}

这样做的好处是进度指示器完全耦合到订阅者的生命周期。我不完全确定这是否是这种方法的预期用途。 javadocs 只提到背压和 "useful initialization"。我用这种方法看到的一个问题是,如果我正在观察的 Observable 碰巧在某处有一个 delaySubscription,那么 onStart 直到延迟之后才会被调用,如果这是一个进度指示器。

另一种方法是在订阅 Observable 之前显示进度指示器。这可行,但分散了进度指示器的责任。

为此使用 onStart 是否正确?

如果您对延迟订阅的影响感到满意,我认为这是 onStart 可以接受的用法。

另一种方法可能是向 MySubscriber 添加一个 initialize() 方法并在订阅之前调用它,或者甚至在 MySubscriber 的构造函数中调用您的初始化逻辑(尽管您必须小心这种用法,以免对 self 的引用逃逸。