gpt4 book ai didi

java - 一个主题的多个订阅者。有订阅时打开,否则关闭

转载 作者:行者123 更新时间:2023-11-30 03:36:49 25 4
gpt4 key购买 nike

我一直在尝试找到一种优雅的方法来做到这一点,但到目前为止还没有成功。我曾多次想要为此设计一个设计模式,但一直没有找到足够的东西。

这是一个用例:在 Android 中,您可以获得 GPS 位置更新。不过,保持 GPS 开启的成本很高。运行 GPS 的成本很高,尤其是当您不执行任何位置更新操作时。我想要一个可以有多个订阅的主题/可观察对象,当它获得 1 个订阅时,它会获取并保持 GPS 开启并开始流式传输位置更新。当所有订阅都被取消订阅时,它就会关闭 GPS。

完成这种一般行为的良好模式是什么?

最佳答案

您也许可以使用 share 运算符,它本质上相当于 publish().refcount()。我还没有测试以确保它可以恢复,但代码似乎表明它可以。基本上,当有一个订阅者时,它会“连接”以启动输出,而该订阅者仅由一个订阅支持。同时,它对任何其他子订阅者进行引用计数,当该值降至零时,它会取消订阅后备订阅。这意味着您可以在调用 share 运算符之前 Hook onSubscribe/onUnsubscribe,并使用 GPS 或任何其他需要泵送数据的设备执行您需要的操作。前面的伪Java:

public class GPSLocationManager {
private final Observable<Location> locations;

public GPSLocationManager() {
locations = getMagicalGPSLocationObservable()
.doOnSubscribe(() -> turnOnGps())
.doOnUnsubscribe(() -> turnOffGps())
.share();
}

public Observable<Location> getLocations() {
return locations;
}

}

就像我说的,悬而未决的问号似乎是,当你下降到0后,你是否可以重新启动连接。我相信答案是肯定的,但我并不肯定。

关于java - 一个主题的多个订阅者。有订阅时打开,否则关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27701682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com