kotlin: Job的生命周期

一,Job生命周期示意图:

image

状态的表格:

image

二,例子:

代码:

        //处理按钮点击事件
        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)

            }
        }

运行结果:

image

三,complete()和join()的区别:

普通的Job不能使用complete()方法结束,
只有CompletableJob才有这个方法,
Job()方法返回的才是CompletableJob,
而launch返回的是Job,
所以这里两个方法不可以混用

posted @ 2025-08-02 15:06  刘宏缔的架构森林  阅读(12)  评论(0)    收藏  举报