java - 正确使用 Subscriber.onStart

标签 java android rx-java

我正在考虑使用 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/

相关文章:

java - 如何使用 Java 反射创建具有接受接口(interface)的构造函数的实例?

java - 继承到子子类

java - first() 和 take(1) 的区别

java - 观察者和订阅者有什么区别?

java - RxJava : "java.lang.IllegalStateException: Only one subscriber allowed!"

java - 在基于图 block 的游戏中生成迷宫

java - 如何在不同的操作系统上部署Java应用程序?

java - 仅使用 C 共享库和头文件,使用 JNI 从 Android 调用 C

android - Jetpack Compose RC01 中缺少 AnimatedImageVector

android - Android 中的十六进制颜色有时是八位数字。如何? #FFFFFF 和 #FFFFFF00 有什么区别?