3

我为 Android 开发应用程序。我想知道我一次可以观察多少个 Kotlin Stateflow?我所做的每一observe件事都是在我自己创建的不同的 CoroutineScope 上完成的,由 IO 调度程序调度或由 Android 框架的生命周期组件提供。

我已经完成了各种操作,例如在协程内的无限循环中进行简单的添加以及使用 Android Studio 分析器,我观察到启动大量执行计算的协程会导致 CPU 负载过高。

考虑到Stateflow 永远不会完成,它的每次收集都会阻塞并在不同的 CoroutineScope 上完成,例如示例和文档所说,我一次可以观察到的最大 Stateflow 数量是多少,而不必担心我会高度使用 CPU,创建太多线程或只是简单地用完设备资源?

4

1 回答 1

5

订阅仍然是协程,协程很便宜。我们可以告诉你绝对没有普遍的界限。

其上的每个收集都阻塞

它暂停,它不会阻塞。并且您始终可以使用takeWhile或类似的方法仅从中收集,直到您可以停止,或者您可以取消正在进行收集的协程(例如 with withTimeout)。

对性能的主要限制是更新a所MutableStateFlow花费的时间与订阅者的数量成线性关系StateFlow,因此如果您使用一千个订阅者更新 a ,它将比仅使用一个订阅者StateFlow更新 a 花费大约一千倍的时间。MutableStateFlow

于 2021-08-18T20:56:08.910 回答