Kotlin协程的创建与启动

基础概念

使用协程前我们需要先了解几个概念:

  • 协程作用域 CoroutineScope:定义新协程的范围,通过它的扩展函数可以创建、启动协程,并可以管理协程,比如取消该作用域下的协程,Kotlin 协程为我们提供了一组内置的 Scope: MainScope:使用 Dispatchers.Main 调度器的作用域 LifecycleScope:与 Lifecycle 生命周期绑定 ViewModelScope:与 ViewModel 生命周期绑定 GlobalScope:生命周期贯穿全局
  • 协程构建器:CoroutineScope 的扩展函数,用于构建协程,比如 launch,async;
  • 协程上下文 CoroutineContext:一个左向链表的实现,Job、Dispatcher 调度器都可以是它的元素,CoroutineContext 有一个非常好的作用就是可以很方便的通过其获取 Job、Dispatcher 调度器等数;
  • CoroutineStart启动模式:DEFAULT:立即调度,可以在执行前被取消 LAZY:需要时才启动,需要 start、join 等函数触发才可进行调度 ATOMIC:立即调度,协程肯定会执行,执行前不可以被取消 UNDISPATCHED:立即在当前线程执行,直到遇到第一个挂起
  • Dispatchers调度器:DEFAULT:默认调度器,适合 CPU 密集型任务调度器,比如逻辑计算 Main:UI 线程调度器 Unconfined:对协程执行的线程不做限制,协程恢复时可以在任意线程 IO:IO调度器,适合 IO 密集型任务调度器 比如读写文件,网络请求等
  • suspending lambda:一个可挂起的 lambda 表达式,它的全定义为 suspend CoroutineScope.() -> Unit,这是一个被 suspend 修饰符修饰的"CoroutineScope 扩展函数类型",作为扩展函数,它的优势在于可以直接访问 CoroutineScope 内的属性;
  • suspension point 挂起点:一般对应挂起函数被调用的位置;
  • 挂起函数:由 suspend 修饰的函数,挂起函数只能在挂起函数或者协程中调用;
【声明】:芜湖站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

相关文章