stateIn 运算符不更新 StateFlow 的缓存值
stateIn operator doesn't update the cached value of StateFlow
我有一些共享流,这些流被合并到不同 类 中的多个流中,然后这些流被合并成一个流。原来的共享流是这样配置的:
protected val statusMutable = MutableSharedFlow<Int>()
val status: Flow<Int> = statusMutable.asSharedFlow()
所以,默认配置。最后我有这样的代码:
val status
get() = merge(
object1.status, // merged shared flows
object2.status, // merged shared flows
object3.status, // merged shared flows
statusMutable
).stateIn(GlobalScope, SharingStarted.Lazily, initialValue = someInt)
这个流应该是无限热流,所以我用的是GlobalScope
(如果有更好的方法,你也可以告诉我如何更好地解决这个问题,但这不是实际问题)。
实际问题是值的发出和收集都很好,但结果 StateFlow
出于某种原因没有更新其值 属性(因此重放缓存)。这会导致新订阅者无法获得订阅的最新发射值的情况。这可能是什么原因造成的,我该如何解决?
事实证明,问题是我通过 getter 访问此流程,尽管我只需要将其分配给 属性。多么愚蠢的错误!有趣的是,我放弃了自己寻找答案并发布了这个问题,只是在大约 15 分钟后才发现错误。
我有一些共享流,这些流被合并到不同 类 中的多个流中,然后这些流被合并成一个流。原来的共享流是这样配置的:
protected val statusMutable = MutableSharedFlow<Int>()
val status: Flow<Int> = statusMutable.asSharedFlow()
所以,默认配置。最后我有这样的代码:
val status
get() = merge(
object1.status, // merged shared flows
object2.status, // merged shared flows
object3.status, // merged shared flows
statusMutable
).stateIn(GlobalScope, SharingStarted.Lazily, initialValue = someInt)
这个流应该是无限热流,所以我用的是GlobalScope
(如果有更好的方法,你也可以告诉我如何更好地解决这个问题,但这不是实际问题)。
实际问题是值的发出和收集都很好,但结果 StateFlow
出于某种原因没有更新其值 属性(因此重放缓存)。这会导致新订阅者无法获得订阅的最新发射值的情况。这可能是什么原因造成的,我该如何解决?
事实证明,问题是我通过 getter 访问此流程,尽管我只需要将其分配给 属性。多么愚蠢的错误!有趣的是,我放弃了自己寻找答案并发布了这个问题,只是在大约 15 分钟后才发现错误。