zl程序教程

您现在的位置是:首页 >  后端

当前栏目

【Kotlin 协程】协程启动 ⑥ ( 协程生命周期状态 | 新创建 New | 活跃 Active | 完成中 Completing | 已完成 Completed | 取消中 | 已取消 )

Kotlin状态 启动 完成 生命周期 New 取消 协程
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 状态 ;

在这里插入图片描述