RxJava 2 - 观察列表中的添加和删除

时间:2017-07-20 18:05:29

标签: android rx-java2

我对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
    }
}

我无法理解如何创建可流动的,从何而来。然后还有如何在其上发出新事件以便订户在那里获得事件。

1 个答案:

答案 0 :(得分:2)

我不认为你的案件有点适合Flowable。查看Observable和Flowable here之间的差异。根据官方文档,您应该使用Flowable,时间:

  

处理以某种方式生成的10k +元素   某处,因此链可以告诉来源限制金额   它会产生。

     

从磁盘读取(解析)文件本质上是阻塞的   基于拉力的,当你控制时,它适用于背压   例如,您为此指定的请求读取了多少行   量)。

     

通过JDBC从数据库读取也是阻塞和基于拉取的   并且可以通过调用ResultSet.next()来控制每个   下游请求。

     

网络(流媒体)IO,网络帮助或协议   使用支持请求一些逻辑数量。

     

最终可能获得的许多阻止和/或基于拉取的数据源   未来的非阻塞反应API /驱动程序。

在您的情况下,最好使用Observable代替Flowable。顺便说一句,你可以从Subject轻松创建它们。检查出here