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() 解决了问题。
我有一个 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() 解决了问题。