ConnectableObservable什么时候终止?

时间:2017-11-10 17:28:21

标签: java android rx-java rx-java2

我有一个可以观察到某些魔法的观察者,我将其用作活动范围内的单身人士。所以谁想要获得更新,可以订阅并获得最后的排放值和新排放。

Observable<Object> currentZoneObservable;

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

我确保所有订阅者,取消订阅为好公民。我甚至计算doOnSubsbscribe()doOnUnSubscribe()中的订阅者数量。当应用程序进入后台时,它有0个订阅者。

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

如果没有订阅者,如何确保connectableObservable停止?我的理解是.autoConnect()应该照顾这个。

2 个答案:

答案 0 :(得分:3)

当没有观察员时,

autoConnect()不会取消订阅 - refCount()

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

答案 1 :(得分:2)

autoConnect()返回一个Observable,当第一个Observer订阅时,它会自动连接到此ConnectableObservable。

因此即使所有订阅者都没有订阅,可观察的仍然存在。

refCount()返回一个与此ConnectableObservable保持连接的Observable,只要至少有一个对此ConnectableObservable的订阅

这将使可连接的可观察物停止所有正在进行/未来的排放。

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