我正在考虑使用订阅者。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的引用不会逃逸)。