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 的引用逃逸。
我正在考虑使用 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 的引用逃逸。