美文网首页
协程四(CoroutineScope)

协程四(CoroutineScope)

作者: coke613 | 来源:发表于2023-07-06 10:02 被阅读0次
定义协程必须指定其CoroutineScope,它会跟踪所有协程,同样它还可以跟踪取消它所启动的协程.

协程作用域:

  • GlobalScope. 生命周期是process 级别的,即时Activity 或 fragment已经销毁,协程仍然在执行.

  • MainScope. 在Activity 中使用,可以在onDestroy()中取消.

  • viewModelScope. 只能在ViewModel 中使用,绑定ViewModel 的生命周期.

  • lifecycleScope. 只能在Activity,fragment 中使用,会绑定Activity 和 Fragment生命周期.

coroutineScope 与runBlocking 协程作用域
  • runBlocking是常规函数,而coroutineScope 是挂起函数.
  • 它们都会等待其协程以及所有子协程结束, 主要区别在于runBlocking 方法会阻塞当前线程来等待,而coroutineScope只是挂起,会释放底层线程用于其他用途.
coroutineScope 与 supervisorScope 协程作用域
  • coroutineScope: 一个协程失败了,所有其他兄弟协程也会被取消
  • supervisorScope: 一个协程失败了,不会影响其他兄弟协程
        runBlocking {
            coroutineScope {
               val job1 =  launch {
                   delay(400)
                   println("job1 fininsh")
               }


                val job2 = launch {
                    delay(200)
                    println("job2 fininsh")    // ① 程序打印   job2 fininsh
                   throw IllegalArgumentException()    // ② 程序崩溃 协程体取消
                }
            }
        }
        runBlocking {
            coroutineScope {
               val job1 =  launch {
                   delay(400)
                   println("job1 fininsh")   // ② 程序打印   job1 fininsh
               }


                val job2 = async {
                    delay(200)
                    println("job2 fininsh")   //  ① 程序打印   job2 fininsh
                    "HHH"
                   throw IllegalArgumentException()
                }
            }
        }

相关文章

网友评论

      本文标题:协程四(CoroutineScope)

      本文链接:https://www.haomeiwen.com/subject/biekudtx.html