正确使用Subscriber.onStart



我正在考虑使用订阅者。onStart显示进度指示器,然后隐藏在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只提到了反压和"有用的初始化"。我用这种方法看到的一个问题是,如果我正在观察的Observable碰巧在某个地方有一个delaySubscription,那么onStart将不会被调用,直到延迟之后,如果它是一个进度指示器,这是很糟糕的。

另一种选择是在订阅Observable之前显示进度指示器。这是有效的,但是分散了进度指示器的责任。

使用onStart是正确的吗?

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

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

相关内容

  • 没有找到相关文章

最新更新