为什么它不能应用 flatmap 并订阅同一个 RxBleConnection observable 两次?

Why can't it apply flatmap and subscribe on the same RxBleConnection observable twice?

如题,

为简单起见,如果我想使用 不同 UUID 执行两次读取操作:

(我知道RxAndroidBle提供了多读功能)

Observable<RxBleConnection> ob = device.establishConnection(false);

ob.flatMap(rxBleConnection -> rxBleConnection.readCharacteristic(CHAR_WIFI_SSID))
        .subscribe(
                characteristicValue -> {
                    //2. then read Successfully here !!!!!
                },
                throwable -> {
                }
        );

ob.flatMap(rxBleConnection -> rxBleConnection.readCharacteristic(CHAR_WIFI_SECURITY_MODE))
        .subscribe(
                characteristicValue -> {     
                },
                throwable -> {
                    //1. I got BleAlreadyConnectedException error first !!!!
                }
        );

为什么第二个 subscribe() 得到 BleAlreadyConnectedException?

==========更新==========

我找到了解决方案, 如果我修改

device.establishConnection(假)==> device.establishConnection(false).compose(new ConnectionSharingAdapter())

ConnectionSharingAdapter 会做这样的事情:

sourceObservable.replay(1).refCount();

保持源可观察到的最后一个发射

对同一个 Observable 订阅两次将调用订阅逻辑两次,这在某些情况下可能是多余的,或者像您的情况一样有问题,您正在建立到 Ble 的多个连接,这是被禁止的并得到了 BleAlreadyConnectedException.
正如徐院长所指出的,你应该多播你的 Observable 来防止这种情况发生。 (您可以使用各种 publish/share 运算符)