sol*_*lru 1 android kotlin kotlin-coroutines kotlin-flow
我有一些共享流,它们被合并为不同类中的多个流,然后这些流被合并为一个流。原始共享流配置如下:
protected val statusMutable = MutableSharedFlow<Int>()
val status: Flow<Int> = statusMutable.asSharedFlow()
Run Code Online (Sandbox Code Playgroud)
所以,默认配置。最后我有这样的代码:
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)
Run Code Online (Sandbox Code Playgroud)
这个流应该是无限热流,所以我正在使用GlobalScope(如果有更好的方法,你也可以告诉我如何更好地处理这个问题,但这不是实际的问题)。
实际的问题是,值被很好地发出和收集,但由于某种原因,结果StateFlow并没有更新其值属性(因此重播缓存)。这会导致新订阅者无法获得订阅的最新发出值的情况。造成这种情况的原因是什么以及如何解决?
事实证明,问题是我通过 getter 访问此流程,尽管我只需要将其分配给该属性。这是多么愚蠢的错误啊!有趣的是,我放弃了自己寻找答案并发布了这个问题,结果在 15 分钟后发现了一个错误。
| 归档时间: |
|
| 查看次数: |
636 次 |
| 最近记录: |