ConnectableObservable 何时终止?

When does a ConnectableObservable terminates?

我有一个 observable 可以做一些魔术,我在 activity 范围内将它用作单例。因此,谁想要获得更新,可以订阅并获得上次发出的值和新的排放量。

Observable<Object> currentZoneObservable;

    public Observable<Object> getCurrentZoneObservable() {
        if (currentZoneObservable == null) {
            currentZoneObservable = someUseCase.getObservable()
            .replay(1)
            .autoConnect();
        }
        return currentZoneObservable;
    }

我确保所有这些订阅者,作为一个好公民退订。我什至在计算 doOnSubsbscribe()doOnUnSubscribe() 中的订阅者数量 当应用程序进入后台时,它有 0 个订阅者。

我的问题是 connectableObservable 永远不会完成,如果它正在执行某些操作,它仍然会继续进行。例如。如果它在网络不可用时重试某些网络呼叫,它会继续这样做。

如何确保我的 connectableObservable 在没有订阅者时停止?我的理解是 .autoConnect() 应该处理这个问题。

autoConnect() does not unsubscribe when there are no observers anymore - refCount() 会。

您可能有兴趣使用 BehaviorSubject:一些不错的文档

autoConnect(): Returns 当第一个 Observer 订阅时自动连接到这个 ConnectableObservable 的 Observable。

所以即使所有订阅者取消订阅,observable 仍然存在。

refCount(): Returns 一个保持连接到这个 ConnectableObservable 的 Observable,只要至少有一个订阅这个 ConnectableObservable

这将使可连接的可观察对象停止所有 ongoing/future 发射。

从 autoConnect() 更改为 refCount() 解决了问题。