默认情况下,Flow在同一协程上下文中执行,如果想要在不同线程运行数据流的生产和消费,我们可以使用flowOn(): importkotlinx.coroutines.Dispatchersimportkotlinx.coroutines.flow.flowOnrunBlocking{simpleFlow().flowOn(Dispatchers.IO)// 在 IO 线程生产数据.collect{println("收到: $it(运行在: ${Thread.currentT...
valsharedFlow=MutableSharedFlow<Int>()CoroutineScope(Dispatchers.IO).launch{sharedFlow.emit(1)sharedFlow.emit(2)}sharedFlow.collect{println("收到: $it")} 4. Flow 在 Android 中的应用 4.1 ViewModel + Flow classMyViewModel:ViewModel(){privateval_dataFlow=MutableStateFlow(0)valdataFlow:StateFlow<Int...
1、取消协程: 可以通过取消其所在的协程来停止收集Flow。这是最常见的方式,因为Flow是协程的一部分。 代码语言:javascript 代码运行次数:0 运行 AI代码解释 val job=CoroutineScope(Dispatchers.IO).launch{flow.collect{value->println(value)}}// 在需要的时候取消协程job.cancel() 2、使用操作符过滤: 可以在F...
在Kotlin Coroutines Flow 系列(一) Flow 基本使用 一文最后,我整理了 Flow 相关的 Terminal 操作符。本文介绍 reduce 和 fold 两个操作符。 reduce 类似于 Kotlin 集合中的 reduce 函数,能够对集合进行计算操作。 例如,对平方数列求和: 代码语言:javascript 代码运行次数:0 运行 AI代码解释 fun main() = runBl...
一. Kotlin Flow 介绍 Flow 库是在 Kotlin Coroutines 1.3.2 发布之后新增的库。 官方文档给予了一句话简单的介绍: Flow — cold asynchronous stream with flow builder and comprehensive operator set (filter, map, etc); Flow 从文档的介绍来看,它有点类似 RxJava 的 Observable。因为 Observable 也有 Cold...
一. Kotlin Flow 介绍 Flow 库是在 Kotlin Coroutines 1.3.2 发布之后新增的库。 官方文档给予了一句话简单的介绍: Flow — cold asynchronous stream with flow builder and comprehensive operator set (filter, map, etc); Flow 从文档的介绍来看,它有点类似 RxJava 的 Observable。因为 Observable 也有 Cold...
停止Flow 在某些情况下,你可能希望停止或取消一个正在进行的Flow操作。主要有以下几种方法: 1、取消协程: 可以通过取消其所在的协程来停止收集Flow。这是最常见的方式,因为Flow是协程的一部分。 val job = CoroutineScope().launch { flow.collect { value -> println(value) } ...
kotlinx.coroutines.delay(50) emit(4) } // 将两个flow合并为一个flow valmergedFlow = merge(flow1, flow2) mergedFlow.collect { value -> println(value) } } // 输出: 1 2 3 4 在上面的例子中,flow1和flow2都在发出一些数据,使用merge函数将它们合并...
在Kotlin Coroutines Flow 系列(一) Flow 基本使用 一文最后,我整理了 Flow 相关的 Terminal 操作符。本文介绍 reduce 和 fold 两个操作符。 reduce 类似于 Kotlin 集合中的 reduce 函数,能够对集合进行计算操作。 例如,对平方数列求和: fun main() = runBlocking { val sum = (1..5).asFlow() .map { ...
import kotlinx.coroutines.runBlocking class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // 携程中调用挂起函数返回一个 Flow 异步流 ...