You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中Room返回的Flow的collect操作会随数据变更重执行吗?

问题解答

当info_table中的记录发生变更时,listIncompleted().collect{..}里的代码块会重新执行,而非仅执行一次。

原因说明

Room 对返回Flow类型的@Query方法做了内置的监听逻辑:

  • 当你调用collect启动协程后,Room会持续监听该查询对应的数据集(也就是info_table中满足translateState != COMPLETED的记录)。
  • 只要数据库中任何操作导致这个数据集发生变化(比如新增符合条件的记录、修改某条记录的translateState使其进入/退出该数据集、删除符合条件的记录),Room就会自动重新执行查询,将更新后的List<RecordEntity>发射给Flow,进而触发collect内的代码块再次执行。

额外注意

只要serviceScope对应的协程处于活跃状态(比如你的MyService还在运行且协程未被取消),这个监听就会一直持续。如果Service被销毁或协程被取消,监听才会停止,collect的代码块也不会再被触发。

内容的提问来源于stack exchange,提问作者HelloCW

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 18:14:55