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