协程调度器与上下文
Kotlin协程调度器与上下文详解:Dispatchers选择与切换。
1. Dispatchers
// 主线程(UI 操作)
withContext(Dispatchers.Main) {
updateUI()
}
// IO 线程池(网络、文件)
withContext(Dispatchers.IO) {
val data = fetchData()
}
// 默认线程池(CPU 密集型)
withContext(Dispatchers.Default) {
heavyComputation()
}
// 不限制(继承父协程调度器)
launch(Dispatchers.Unconfined) { }
2. 调度器选择
| 调度器 | 线程数 | 适用场景 |
|---|---|---|
| Main | 1 | UI 更新 |
| IO | 64(默认) | 网络、文件、数据库 |
| Default | CPU 核数 | 排序、解析、计算 |
| Unconfined | 不固定 | 测试、特殊场景 |
3. 上下文组合
// 组合调度器和异常处理器
val context = Dispatchers.IO + CoroutineExceptionHandler { _, e ->
Log.e("Coroutine", "Error", e)
}
launch(context) { /* ... */ }
4. withContext 切换
suspend fun loadData(): Data {
val data = withContext(Dispatchers.IO) {
api.fetchData() // IO 操作
}
return data // 自动切回原调度器
}