协程作用域分为 顶级作用域,协同作用域 与 主从作用域,
分别对应 GlobalScope, coroutineScope, supervisorScope
1. 产生方式:
(1)顶级: GlobalScope
(2)协同: coroutineScope (或者Job嵌套)
(3)主从:supervisorScope (与内部直接子协程主从, 与外部协同)
GlobalScope.launch { //顶级
coroutineScope { //协同
//...
}
supervisorScope { //主从
//...
}
}
2. 异常传播方式
不同的作用域,在处理异常上有不同的特征.
顶级: 不向外部传播
协同: 双向传播?
主从: 自上而下、单向传播
异常处理 使用 CoroutineExceptionHandler类 和try catch 结合
//异常处理
val coroutineExceptionHandler = CoroutineExceptionHandler{ coroutineContext, throwable ->
println("Handle $throwable in CoroutineExceptionHandler")
}
val topLevelScope = CoroutineScope(coroutineExceptionHandler)
topLevelScope.launch {
//....
}
(待续...)
参考:juejin.cn/post/693547…