MutableSharedFlow
是 Kotlin 协程库(Kotlin Coroutines)中的一个类,它是 SharedFlow
的可变版本,允许发射新的值。SharedFlow
是一种冷流,能够让多个订阅者共享同一个数据流。MutableSharedFlow
具有可变性,可以使用 emit
方法来发射新的值。
创建 MutableSharedFlow
时,可以传递一些可选参数来控制其行为。以下是 MutableSharedFlow
构造函数的参数及其含义:
public fun <T> MutableSharedFlow(
replay: Int = 0,
extraBufferCapacity: Int = 0,
onBufferOverflow: BufferOverflow = BufferOverflow.SUSPEND
): MutableSharedFlow<T>
-
replay
: 重放缓存大小,默认值为 0。表示当新订阅者订阅时,会重放多少个最近发射的值。如果设置为正数,新的订阅者会接收到最近发射的这些值。 -
extraBufferCapacity
: 额外缓冲区容量,默认值为 0。表示在正常的缓冲区之外可以额外缓存多少个值。这可以防止在缓冲区满时发射值导致挂起。 -
onBufferOverflow
: 缓冲区溢出行为,默认值为BufferOverflow.SUSPEND
。定义当缓冲区已满时应该采取的行为。可选值包括:BufferOverflow.SUSPEND
: 挂起发射者,直到有空间为止。BufferOverflow.DROP_OLDEST
: 丢弃最旧的缓冲区元素,以腾出空间给新元素。BufferOverflow.DROP_LATEST
: 丢弃最新发射的元素。
下面是一个示例,展示了如何创建和使用 MutableSharedFlow
:
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
fun main() = runBlocking<Unit> {
// 创建一个 MutableSharedFlow,重放最后 2 个值,额外缓冲区容量为 2
val sharedFlow = MutableSharedFlow<Int>(replay = 2, extraBufferCapacity = 2, onBufferOverflow = BufferOverflow.DROP_OLDEST)
// 启动一个协程,向 sharedFlow 发射值
launch {
for (i in 1..5) {
println("Emitting $i")
sharedFlow.emit(i)
}
}
// 启动另一个协程,订阅 sharedFlow 并打印接收到的值
launch {
sharedFlow.collect { value ->
println("Collected $value")
}
}
}
在这个示例中,MutableSharedFlow
被配置为重放最后两个值,并且在缓冲区满时丢弃最旧的元素。发射的值会被收集器接收到并打印。
---- 文章由 ChatGPT 生成