我对RxJava 2有点新。我可以订阅从第三方库提供给我的或从范围/列表创建的observable。
现在我想提供我自己的RxJava 2 flowables。以下是一些背景信息:
我有一个需要发现蓝牙设备的应用程序。有些服务在检测到扫描记录时向我提供扫描记录(设备发送有关其状态,RSSI等的更新)。
在DeviceRegistry中,我维护一个设备列表(mac地址,平均RSSI等),我想在添加设备(检测到新的MAC地址)或删除设备(关闭设备)时从我的DeviceRegistry外部观察
我想我应该提供类似的东西:
class DeviceRegistry {
// All devices currently active
val devices: MutableMap<String, Device>
// Gives a way to subscribe to newly detected devices (to update the UI for instance)
fun newlyDetectedDevices(): Flowable<Device>
// Gives a way to subscribe to devices which get turned off (to update the UI for instance)
fun newlyDetectedDevices(): Flowable<Device>
fun onNewScanRecord(scanRecord) {
// Check if the device is new, if it is, emit something on the
// newlyDetectedDevices flowable
}
}
我无法理解如何创建可流动的,从何而来。然后还有如何在其上发出新事件以便订户在那里获得事件。
答案 0 :(得分:2)
我不认为你的案件有点适合Flowable
。查看Observable和Flowable here之间的差异。根据官方文档,您应该使用Flowable
,时间:
处理以某种方式生成的10k +元素 某处,因此链可以告诉来源限制金额 它会产生。
从磁盘读取(解析)文件本质上是阻塞的 基于拉力的,当你控制时,它适用于背压 例如,您为此指定的请求读取了多少行 量)。
通过JDBC从数据库读取也是阻塞和基于拉取的 并且可以通过调用ResultSet.next()来控制每个 下游请求。
网络(流媒体)IO,网络帮助或协议 使用支持请求一些逻辑数量。
最终可能获得的许多阻止和/或基于拉取的数据源 未来的非阻塞反应API /驱动程序。
在您的情况下,最好使用Observable
代替Flowable
。顺便说一句,你可以从Subject
轻松创建它们。检查出here。