本篇解析 example-supervision-01.kt。探讨如何打破常规的异常取消联动。
1. 核心概念:SupervisorJob
默认情况下,子协程失败会导致父协程及所有兄弟协程被取消。使用 SupervisorJob 可以改变这一行为。
特点:
- 单向取消:父协程取消会触发子协程取消,但子协程失败不会导致父协程及其它兄弟协程取消。
- 责任自负:每个子协程必须自己处理自己的异常(通过
try-catch或CoroutineExceptionHandler)。
2. 代码解析
1 | val supervisor = SupervisorJob() |
- 执行逻辑:即便第一个子协程崩溃了,第二个子协程依然在运行,不受任何影响。
3. 开发者感悟
SupervisorJob 是构建鲁棒系统的关键。在 Android 中,如果你有一个界面展示多个独立板块(如天气、新闻、广告),某个板块的数据加载失败不应该导致整个界面崩溃或停止更新。这就是“监督”机制的价值所在。