我有一个可以观察到某些魔法的观察者,我将其用作活动范围内的单身人士。所以谁想要获得更新,可以订阅并获得最后的排放值和新排放。
Observable<Object> currentZoneObservable;
public Observable<Object> getCurrentZoneObservable() {
if (currentZoneObservable == null) {
currentZoneObservable = someUseCase.getObservable()
.replay(1)
.autoConnect();
}
return currentZoneObservable;
}
我确保所有订阅者,取消订阅为好公民。我甚至计算doOnSubsbscribe()
和doOnUnSubscribe()
中的订阅者数量。当应用程序进入后台时,它有0个订阅者。
我的问题是connectableObservable
永远不会完成,如果它正在进行某些操作,它仍然继续使用它。例如。如果在网络不可用时重试某个网络呼叫,它会继续这样做。
如果没有订阅者,如何确保connectableObservable
停止?我的理解是.autoConnect()
应该照顾这个。
答案 0 :(得分:3)
autoConnect()不会取消订阅 - refCount()。
您可能有兴趣使用BehaviorSubject:一些不错的文档
答案 1 :(得分:2)
autoConnect():返回一个Observable,当第一个Observer订阅时,它会自动连接到此ConnectableObservable。
因此即使所有订阅者都没有订阅,可观察的仍然存在。
refCount():返回一个与此ConnectableObservable保持连接的Observable,只要至少有一个对此ConnectableObservable的订阅
这将使可连接的可观察物停止所有正在进行/未来的排放。
从autoConnect()更改为refCount()解决了这个问题。