手动观察 SnapshotStateList

Posted

技术标签:

【中文标题】手动观察 SnapshotStateList【英文标题】:Manually observe SnapshotStateList 【发布时间】:2022-01-21 01:03:41 【问题描述】:

如何 或 MutableState?它说 mutableStateListOf 返回可以观察的列表,但我找不到这样的方法。是不是只有 Compose 才能观察到变化?

【问题讨论】:

这能回答你的问题吗? Jetpack Compose Observe mutableStateOf in ViewModel 【参考方案1】:

观察状态对象(例如mutableStateOfmutableStateListOf() 的结果)的最简单方法是使用snapshotFlow

snapshotFlowblock 参数将在它使用的任何状态对象发生更改时调用,block 的结果将被发送到流。

或者,您可以使用SnapshotStateObserver,它允许多路复用单个应用观察者来观察大量 lambda。这就是 Compose UI 布局和绘图使用的功能,例如,用于跟踪何时重新计算布局以及何时重放绘图命令。

State 对象没有 observesubscribe 等价物,因为 Snapshots 的设计和优化是为了观察函数读取的一组开放的、动态的对象以及它调用的任何函数(例如 Compose 需要);并且没有实现单个对象(Compose 不需要)的快速路径,因此成本很高。拥有状态对象的observe 方法意味着它既快速又便宜,但事实并非如此。

【讨论】:

以上是关于手动观察 SnapshotStateList的主要内容,如果未能解决你的问题,请参考以下文章

手动实现KVO

如何从最后一行重复观察中制作子集数据框?

设计模式之观察者模式

是否可以以编程方式设置 gdb 观察点?

创建和订阅简单的观察队列

把 LiveData 用于事件传递那些坑