flow初体验

120 阅读1分钟
val flowA = MutableStateFlow(1)
val flowB = MutableStateFlow(2)
val flowC = flowA.combine(flowB) { a, b -> a + b }

viewModelScope.launch {
    flowC.collect {
        Log.v("ttaylor","c1=$it")
    }
}
viewModelScope.launch {
    delay(2000)
    flowA.emit(20)
    flowB.emit(200)

构建了两个流A,B,并指定初始值分别为1和2。使用 combine 将AB合流为C,用于求和。当订阅 flowC 时,第一个和值在流上生成。当流AB持续变化值之后,流C的值也会随之而变。

打印如下:

com.llw.mvidemo                      V  c1=3
com.llw.mvidemo                      V  c1=22
com.llw.mvidemo                      V  c1=220

如果flowA和flowB的值不变,调用emit,则不会触发flowC.collect

val flowA = MutableStateFlow(1)
val flowB = MutableStateFlow(2)
val flowC = flowA.combine(flowB) { a, b -> a + b }
Log.v("ttaylor","c111")

viewModelScope.launch {
    flowC.collect {
        Log.v("ttaylor","c1=$it")
    }
}
viewModelScope.launch {
    delay(2000)
    flowA.emit(1)
    flowB.emit(2)

打印如下:

com.llw.mvidemo                      V  c1=3

参考:# Android 架构之 MVI 雏形 | 响应式编程 + 单向数据流 + 唯一可信数据源