美文网首页
浅析Kotlin协程用法

浅析Kotlin协程用法

作者: K_Smile | 来源:发表于2018-08-20 17:55 被阅读0次

    协程是什么?

    首先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启动的协程任务会阻断当前线程,直到该协程执行结束。

    代码示例:

    图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

    相关文章

      网友评论

          本文标题:浅析Kotlin协程用法

          本文链接:https://www.haomeiwen.com/subject/byfliftx.html