kotlin: Job的生命周期
一,Job生命周期示意图:
状态的表格:
二,例子:
代码:
//处理按钮点击事件
binding.button2.setOnClickListener {
runBlocking {
// Job 在创建后就是 Active 状态
val job = Job()
println(job) // JobImpl{Active}@ADD
// 直到我们调用函数让它完成
job.complete()
println(job) // JobImpl{Completed}@ADD
// launch 初始化后默认是 active 状态
val activeJob = launch {
delay(1000)
}
println(activeJob) // StandaloneCoroutine{Active}@ADD
// 我们可以这样子等待 Job 完成
activeJob.join() // (1 sec)
println(activeJob) // StandaloneCoroutine{Completed}@ADD
// launch 延迟初始化后状态为 New
val lazyJob = launch(start = CoroutineStart.LAZY) {
delay(1000)
}
println(lazyJob) // LazyStandaloneCoroutine{New}@ADD
println("isActive:"+lazyJob.isActive)
// 我们需要调用 start 方法,激活它
lazyJob.start()
println(lazyJob) // LazyStandaloneCoroutine{Active}@ADD
println("isActive:"+lazyJob.isActive)
println("isCompleted:"+lazyJob.isCompleted)
lazyJob.join() // (1 sec)
println(lazyJob) //LazyStandaloneCoroutine{Completed}@ADD
println("isCompleted:"+lazyJob.isCompleted)
}
}
运行结果:
三,complete()和join()的区别:
普通的Job不能使用complete()方法结束,
只有CompletableJob才有这个方法,
Job()方法返回的才是CompletableJob,
而launch返回的是Job,
所以这里两个方法不可以混用