Kotlin Coroutines Flow 系列(二) Flow VS RxJava2

本文对比分析了Kotlin的Flow与Sequences的区别,指出Flow不会阻塞主线程。接着,讨论了Flow与RxJava的相似性,包括Cold Stream和Hot Stream的概念,并探讨了Flow的Completion和Backpressure策略,如BUFFER、LATEST和DROP,以及如何通过扩展函数实现类似RxJava的onCompleted功能。
摘要由CSDN通过智能技术生成

三. Flow VS Sequences

每一个 Flow 其内部是按照顺序执行的,这一点跟 Sequences 很类似。

Flow 跟 Sequences 之间的区别是 Flow 不会阻塞主线程的运行,而 Sequences 会阻塞主线程的运行。

使用 flow:

fun main() = runBlocking {
    launch {
        for (j in 1..5) {
            delay(100)
            println("I'm not blocked $j")
        }
    }
    flow {
        for (i in 1..5) {
            delay(100)
            emit(i)
        }
    }.collect { println(it) }
    println("Done")
}

执行结果:

1
I'm not blocked 1
2
I'm not blocked 2
3
I'm not blocked 3
4
I'm not blocked 4
5
Done
I'm not blocked 5

使用 sequence:

fun main() = runBlocking {
    launch {
        for (k in 1..5) {
            delay(100)
            println("I'm blocked $k")
        }
    }
    sequence {
        for (i in 1..5) {
            Thread.sleep(100)
            yield(i)
        }
    }.forEach { println(it) }
    println("Done")
}

执行结果:

1
2
3
4
5
Done
I'm blocked 1
I'm blocked 2
I'm blocked 3
I'm blocked 4
I'm blocked 5

由此,可以得出 Flow 在使用各个 suspend 函数时(本例子中使用了collect、emit函数)不会阻塞主线程的运行。

四. Flow VS RxJava

Kotlin 协程库的设计本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值