gpt4 book ai didi

Android LiveData Observer 在性能方面的替代方案

转载 作者:行者123 更新时间:2023-12-02 12:52:44 24 4
gpt4 key购买 nike

我目前正在开发一个应用程序,它能够记录智能手机传感器,如加速度等,并在 GraphView 库的帮助下绘制它们。目前,我将传感器值读入 Room SQLite 数据库,然后使用观察者在 LiveData 对象的帮助下观察表格,我得到新的测量值并将最后一个新的测量值添加到图中的系列中。这就是我更新图表的方式:

sharedViewModel.allAccelerations.observe(viewLifecycleOwner, Observer<List<MeasurementDatabaseHelper.Measurement>> { measurements ->
if (sharedViewModel.isReset.value == true && measurements.isNotEmpty()) {
val time = (measurements.last().time.toDouble() - measurements.first().time.toDouble())*1e-9
val accX = measurements.last().accX.toDouble()
series.appendData(DataPoint(time, accX), true, 50)

}

然而,我的问题是观察者不会对每个添加的测量值使用react,因此当我将最后一个测量值添加到系列时,我会跳过值。我当然可以编写代码来检查每次观察者对 LiveData 更改使用react时必须添加多少值,但这对我来说似乎不是一个好的选择。是否有人可能对如何将数据库中的测量值与 GraphViews 系列同步?

最佳答案

LiveData 是 不是 一条溪流。它旨在代表自给自足的状态;它应该 不是 用于一系列独立事件,您可以在这些事件上建立您的状态。当您按预期使用它时,您不应该担心跳过状态,因为您只关心当前状态。

你似乎追求的是一个 react 流。如果您使用 Room,您可以尝试 RxJava 并将您的测量事件表示为 Flowable溪流。这将使您完全控制背压(您可以明确说明是否要跳过事件或缓冲它们等)。房间有built-in support对于 Rx-observable 查询。

另一种方法是使用始终提供完整数据集的 LiveData,但我不确定这是否会满足您的限制。

关于Android LiveData Observer 在性能方面的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58527820/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com