我正在考虑使用 Subscriber.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
的可接受用法。
另一种方法可能是将 initialize()
方法添加到 MySubscriber
并在订阅之前调用它,或者甚至在 MySubscriber 的构造函数中调用您的初始化逻辑
(尽管您必须小心使用这种用法,以免对 self 的引用发生转义)。
关于java - 正确使用 Subscriber.onStart,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32480737/