浅析Kotlin协程用法

协程是什么?

首先kotlin协程是kotlin的扩展库(kotlinx.coroutines)。

相信大家应该都了解线程的概念,线程在Android开发中一般用来做一些复杂耗时的操作,避免耗时操作阻塞主线程而出现ANR的情况,例如IO操作就需要在新的线程中去完成。但是呢,如果一个页面中使用的线程太多,线程间的切换是很消耗内存资源的,我们都知道线程是由系统去控制调度的,所以线程使用起来比较难于控制。这个时候kotlin的协程就体现出它的优势了,kotlin协程是运行在线程之上的,它的切换由程序自己来控制,无论是 CPU 的消耗还是内存的消耗都大大降低。所以大家赶紧来拥抱kotlin协程吧^_^

Android项目中如何引入kotlin协程

在Android module中的build.gradle的dependencies中添加下图中的依赖。


图1

kotlin协程的三种启动方式

1.runBlocking:T     

2.launch:Job

3.async/await:Deferred

第一种启动方式(runBlocking:T)

runBlocking  方法用于启动一个协程任务,通常只用于启动最外层的协程,例如线程环境切换到协程环境。

图2

上图是官方源码中给出的该方法的解释,意思就是说runBlocking启动的协程任务会阻断当前线程,直到该协程执行结束。

代码示例:

浅析Kotlin协程用法_第1张图片
图3

执行结果:可以清楚的看到先将协程中的任务完成才执行主线程中的逻辑

浅析Kotlin协程用法_第2张图片
图4

第二种启动方式(launch:Job)

我们最常用的用于启动协程的方式,它最终返回一个Job类型的对象,这个Job类型的对象实际上是一个接口,它包涵了许多我们常用的方法。例如join()启动一个协程、cancel() 取消一个协程

注⚠️:该方式启动的协程任务是不会阻塞线程的

代码示例:

图5

执行结果:可以清楚的看到主线程没有被阻塞

图6

第三种启动方式(async/await:Deferred)

1.async和await是两个函数,这两个函数在我们使用过程中一般都是成对出现的。

2.async用于启动一个异步的协程任务,await用于去得到协程任务结束时返回的结果,结果是通过一个Deferred对象返回的。

代码示例:

浅析Kotlin协程用法_第3张图片
图7

执行结果:可以看到当协程任务执行完毕时可以通过await()拿到返回结果

图8

补充

协程是可以被取消的和超时控制,可以组合被挂起的函数,协程中运行环境的指定,也就是线程的切换

以上就是kotlin中协程的简单用法,希望可以帮到大家。协程具体的文档在这里:https://github.com/Kotlin/kotlinx.coroutines/blob/master/coroutines-guide.md

你可能感兴趣的:(浅析Kotlin协程用法)