协程是什么?
首先kotlin协程是kotlin的扩展库(kotlinx.coroutines)。
相信大家应该都了解线程的概念,线程在Android开发中一般用来做一些复杂耗时的操作,避免耗时操作阻塞主线程而出现ANR的情况,例如IO操作就需要在新的线程中去完成。但是呢,如果一个页面中使用的线程太多,线程间的切换是很消耗内存资源的,我们都知道线程是由系统去控制调度的,所以线程使用起来比较难于控制。这个时候kotlin的协程就体现出它的优势了,kotlin协程是运行在线程之上的,它的切换由程序自己来控制,无论是 CPU 的消耗还是内存的消耗都大大降低。所以大家赶紧来拥抱kotlin协程吧^_^
Android项目中如何引入kotlin协程
在Android module中的build.gradle的dependencies中添加下图中的依赖。
图1kotlin协程的三种启动方式
1.runBlocking:T
2.launch:Job
3.async/await:Deferred
第一种启动方式(runBlocking:T)
runBlocking 方法用于启动一个协程任务,通常只用于启动最外层的协程,例如线程环境切换到协程环境。
图2上图是官方源码中给出的该方法的解释,意思就是说runBlocking启动的协程任务会阻断当前线程,直到该协程执行结束。
代码示例:
图3执行结果:可以清楚的看到先将协程中的任务完成才执行主线程中的逻辑
图4第二种启动方式(launch:Job)
我们最常用的用于启动协程的方式,它最终返回一个Job类型的对象,这个Job类型的对象实际上是一个接口,它包涵了许多我们常用的方法。例如join()启动一个协程、cancel() 取消一个协程
注⚠️:该方式启动的协程任务是不会阻塞线程的
代码示例:
图5执行结果:可以清楚的看到主线程没有被阻塞
图6第三种启动方式(async/await:Deferred)
1.async和await是两个函数,这两个函数在我们使用过程中一般都是成对出现的。
2.async用于启动一个异步的协程任务,await用于去得到协程任务结束时返回的结果,结果是通过一个Deferred对象返回的。
代码示例:
图7执行结果:可以看到当协程任务执行完毕时可以通过await()拿到返回结果
图8补充
协程是可以被取消的和超时控制,可以组合被挂起的函数,协程中运行环境的指定,也就是线程的切换
以上就是kotlin中协程的简单用法,希望可以帮到大家。协程具体的文档在这里:https://github.com/Kotlin/kotlinx.coroutines/blob/master/coroutines-guide.md
网友评论