SharedFlow 参数含义

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 生成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吃饱很舒服

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值