协程的声明周期是通过 Job 的几种状态体现的,Job协程有 6 种状态:
新建状态
新建状态主要是通过launch函数创建协程对象,它仅仅是一个空的协程对象。活动状态
新建协程调用start函数后,它就进入活动状态。launch函数通过start参数判断是否启动协程。处于活动状态的协程会执行协程体。正在完成状态
正在完成状态是一个瞬间过渡状态,从活动状态进入到已完成状态时经历的中间状态。已完成状态
协程成功执行完协程体,就会进入已完成状态,这是最终状态,说明这个协程已经停止。正在取消状态
在活动状态或正在完成状态时,如果调用了cancel函数则会进入已取消状态,在此之前要先进入正在取消状态,正在取消状态也是一个瞬间过渡状态。-
已取消状态
在新建状态、活动状态或正在完成状态时,如果调用cancel函数最终都会是已取消状态,只是新建状态没有经历正在取消状态,而直接是已取消状态。已取消状态是最终状态,使用这个协程已经停止。
Job状态
Job 状态可以通过 Job 的 isActive、isCompleted 和 isCancelled 属性判断而知,具体说明如下:
| 状态 | isActive | isCompleted | isCancelled |
|---|---|---|---|
| 新建状态 | false | false | false |
| 活动状态 | true | false | false |
| 正在完成状态 | true | false | false |
| 正在取消状态 | false | false | true |
| 已取消状态 | false | true | true |
| 已完成状态 | false | true | false |
