Kotlin Flows 流 — 基础

Kotlin Flows 流 — 基础

上一篇研究了 Kotlin 协程。上一篇文章重点介绍了协程的一些基础知识,如协程上下文(CoroutineContext)、协程作用域(CoroutineScope)、协程构建器等。如承诺的那样,这是关于流(Flows)的后续文章。

什么是流?

可以异步计算的数据流被称为流(Flow)。Flow,像 LiveData 和 RxJava 流一样,允许你实现观察者模式:由一个对象(源)维护其依赖项列表,称为观察者(收集器),并在任何状态变化时自动通知它们。流使用挂起函数异步产生和消费值。

要创建流,首先你需要创建一个生产者:

val randomFlow: Flow<Int> = flow {
    repeat(10) { it ->
        emit(it+1) // 向流中发射请求的结果
        delay(1000) // 挂起协程1秒
    }
}

要收集流,首先你需要启动一个协程,因为流在底层是操作协程的。使用 collect 操作符来收集它发射的值。

lifecycleScope.launch {
    viewModel.uiStateFlow.collect { it ->
        binding.uiText.text = it.toString()
    }
}

有两种不同类型的流:

冷流(Cold Flow)

它不会开始产生值,直到有人开始收集它们。它只能有一个订阅者,并且不存储数据。 // 常规流示例

val coldFlow = flow {
    emit(0) 
    emit(1)
    emit(2)
}

launch { // 第一次调用 collect
    coldFlow.collect { value ->
        println("cold flow collector 1 received: $value")
    }

    delay(2500)
        
// 第二次调用 collect
    coldFlow.collect { value ->
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值