【发布时间】:2017-06-19 18:51:00
【问题描述】:
我用于 BLE 外围设备的 Android 应用写入 2 个不同的设备特征并接收来自其他 2 个的通知。 RxAndroidBle 库的开发人员告诫不要在同一个 RxBleConnection 实例上进行多个订阅,但我看不到任何将所有这些 I/O 操作组合到单个 .subscribe() 中的实际方法,特别是因为其中一个通知是一个相当恒定的数据“水管”。
不知道更好,我只是将RxBleConnection 存储在一个变量中并在多个.subscribe()s 中使用它。据我所知,这一切正常。我调查了RxAndroidBle 库的ConnectionSharingAdapter,但是,虽然我分析了代码,但我不明白它比我的简单方法有什么好处(尽管我很想知道)。
一般来说,详细说明多个.subscribe()s 如何引入状态以及潜在的陷阱会有所帮助。问题:
- 将
RxBleConnection存储在一个变量中并将其用于多个.subscribe()s 有什么问题? - 如果这是一个问题,
ConnectionSharingAdapter是如何解决的? - 说多个订阅“引入状态”是什么意思,这怎么会导致问题?
- 是否有任何干净的方法可以将所有四个特征 I/O 操作组合成一个
.subscribe()(不会降低性能)?
【问题讨论】:
-
这个问题有点太宽泛了——问库的开发者为什么他们建议不要多次订阅可能更容易。从纯 Rx 的角度来看,对同一(冷)流的多个订阅只有在一个主题(例如 RxJava 的
publish())上才是真正可能的,并且围绕主题使用的讨论是一个更大的问题,可能已经有了答案在这个网站和许多其他资源上。 -
我确实问过他们这个问题,他们告诉我将讨论转移到 StackOverflow,所以我来了。
-
应该改写问题本身,使其特定于
RxAndroidBle库。我对图书馆有同样的问题,并从关于图书馆的 github 讨论中得到了这里。 @罗伯特刘易斯
标签: android bluetooth-lowenergy rx-java reactive-programming rxandroidble