【Kotlin 协程】协程启动 ⑥ ( 协程生命周期状态 | 新创建 New | 活跃 Active | 完成中 Completing | 已完成 Completed | 取消中 | 已取消 )
2023-09-14 09:07:26 时间
一、协程标识 Job 实例对象
通过 launch 或 async 协程构建器 函数 创建 协程 ,
会返回 Job 类型实例对象 ,
该 Job 对象是 协程的 唯一标识 ,
借助该对象可以实现 对 协程 生命周期 的管理 ;
二、协程生命周期状态
协程 生命周期状态 :
- 新创建 New
- 活跃 Active : 通过调用 Job#isActivity 获取当前是否处于 活跃状态 ;
- 完成中 Completing
- 已完成 Completed : 通过调用 Job#isCompleted 获取当前是否处于 已完成状态 ;
- 取消中 Canceling
- 已取消 Cancelled : 通过调用 Job#isCancelled 获取当前是否处于 取消状态 ;
之前的博客 【Kotlin 协程】协程启动 ④ ( 协程启动模式 | 协程构建器启动模式参数 | DEFAULT 模式 | ATOMIC 模式 | LAZY 模式 | UNDISPATCHED 模式 ) 中 , 提到的 取消 协程 后 , 进入 取消响应状态 , 需要 先进入 取消中 Canceling 状态 , 然后再进入 已取消 Cancelled 状态 ;
三、协程生命周期状态改变
通过 launch 或 async 协程构建器 函数 创建 协程 时 状态为 新创建 New 状态 ;
协程 调度执行 后 会变成 活跃 Active 状态 ;
处于活跃状态的协程 有两个分支 , 分别是 协程完成 和 协程取消 :
-
协程完成分支 : 当有 子协程 完成时 , 会进入 完成中 Completing 状态 , 此时会等待其它子协程执行完毕 , 如果 所有的子协程都执行完毕 , 则进入 已完成 Completed 状态 ;
-
协程取消分支 : 调用 Job#cancel() 函数 取消协程 , 会进入到 取消中 Canceling 状态 , 此时不会立刻取消 , 因为该协程中可能还有多个子协程 , 需要等待 所有子协程都取消后 , 才能进入 已取消 Cancelled 状态 ;
相关文章
- Kotlin 1.4 来了!全新语言特性和更多改进
- 大人,时代变了!使用 Java 16 或 Kotlin 更好的进行插件或模组开发
- 耗时半天,我用 Kotlin 实现了 helang 何语言
- 01. Kotlin 标识符、关键字和注释
- 【Kotlin】Kotlin 领域特定语言 DSL 原理 二 ( 中缀表达式 )
- 【Kotlin 协程】Flow 异步流 ⑧ ( 背压概念 | 使用缓冲处理背压问题 | 使用 flowOn 处理背压问题 | 从提高收集元素效率方向解决背压问题 )
- 【Kotlin】Kotlin 常用表达式 ( range 范围表达式 | when 条件表达式 | 字符串模板 )
- 【Kotlin】函数 ③ ( 匿名函数 | 匿名函数的函数类型 | 匿名函数的隐式返回 )
- 【Kotlin】字符串操作 ② ( 字符串替换函数 replace | 字符串比较操作符 == 和 === | 字符串遍历 forEach )
- 【Kotlin】类的初始化 ① ( 成员属性 | Kotlin 自动为成员字段生成 getter 和 setter 方法 | 手动设置成员的 getter 和 setter 方法 | 计算属性 )
- 【Kotlin】类的初始化 ② ( 主构造函数 | 主构造函数定义临时变量 | 主构造函数中定义成员属性 | 次构造函数 | 构造函数默认参数 )
- 【错误记录】Kotlin 代码运行时报错 ( 成员属性初始化顺序是按照从上到下顺序进行的 , 上面的属性不要调用下面未进行初始化的属性 )
- 【Kotlin】泛型 ③ ( 泛型 out 协变 | 泛型 in 逆变 | 泛型 invariant 不变 | 泛型逆变协变代码示例 | 使用 reified 关键字检查泛型参数类型 )