我有两个observable:第一个来自库RxAndroidBle:
Observable<RxBleConnection> bluetoothObservable = RxBleClient.create(getBaseContext()).getBleDevice(macAddress)
.establishConnection(false)
哪个连接到设备并在拥有订阅者时保持连接,另一个
Observable<Response> serverObservable = Observable.fromCallable(() -> callServer())
然后我把它们拉在一起
bluetoothObservable.zipWith(serverObservable , (rxBleConnection, s) -> {
Log.d(TAG, "zip done");
return "mock result";
}).subscribe((s) -> {},
Throwable::printStackTrace);
但在zip bluetoothObservable
取消订阅后,连接立即失败。如何压缩这些可观察量并保持bluetoothObservable
活着/订阅?
答案 0 :(得分:2)
您可以使用以下.zip()
代替:
Observable.combineLatest(
bluetoothObservable,
serverObservable,
(rxBleConnection, s) -> {
Log.d(TAG, "combined");
return "mock result";
}
)
.subscribe(
(s) -> {},
Throwable::printStackTrace
)
说明:zip
尝试逐个合并Observable
的输出。如果其中一个将完成并且Observable
之前的所有排放都匹配 - 没有必要保留对另一个Observable
的订阅,因为后续的排放将不会被使用。 combineLatest
只是尝试将Observable
的所有排放量合并为最新对。