Kotlin 协程

316 阅读2分钟

Kotlin 协程

给自己看系列

这次只是记录一下学习协程的简单笔记,只记录基本用法,其作用

runBlocking:T

runBlocking 阻塞当前线程,直到协程执行结束。

launch:Job

返回 Job类型对象,Job对应着一个借口,包含了常用方法

// TODO 需要补充下,方法的文字说明
isActive
isCancelled
isComleted
cancel()
join()

launch(...)方法是CoroutineScope的一个拓展函数,方法内包含三个参数

  • 协程上下文:主要作用为线程切换, 调度器: 用来确定那些线程用于协程执行,以下:

    • Dispatcher.Main: 使用这个调度器在Android主线程上运行一个协程。可用来更新UI,在UI线程中执行
    • Dispatcher.IO: 这个调度器被优化在主线程之外执行磁盘或者网络I/O。在线程池中执行
    • Dispatcher.Default: 在主线程之外执行cpu密集型的工作。例如对列表进行排序和解析json,在线程池中执行
    • Dispatcher.Unconfined: 在调用的线程直接执行。
  • 协程启动模式

    启动模式作用
    DEFALUT默认的模式,立即执行协程体
    LAZY只有在需要的情况下执行
    ATOMIC立即执行协程体,但是在开始运行之前无法取消
    UNDISPATCHED立即在当前线程执行携程提,知道第一个suspend调用
  • 协程体

    一个用suspend关键字修饰的一个无参无返回值的函数类型.被修饰的函数成为挂起函数,与之对应的关键字为 resume(恢复),注意:挂起函数只能在协程中和其他挂起函数中调用,不能在其他地方使用。

async:Deferred

async跟launch的用法基本一样。 区别在于:async的返回值是Deferred,async 支持并发,使用并发时,一般都跟着await关键字一起使用。