外观
如何理解协程是不是线程 suspend 会自动切后台吗?
标准回答
协程是可挂起、可恢复的任务,不等于一个独立线程。suspend 表示函数允许在协程中挂起,不表示自动切换后台线程,也不保证内部操作不会阻塞。执行线程由调度器与当前上下文等决定。(协程基础)
机制解释
Dispatchers.Main 常用于 UI,Default 用于 CPU 计算,IO 用于适合阻塞方式执行的 I/O。withContext 可切换执行上下文;delay 挂起协程而不占着线程睡眠,Thread.sleep 会阻塞当前线程。Retrofit 的异步挂起接口与自己写的同步文件读取要区别看待。
延伸追问
两个 suspend 调用顺序写出来会并行吗?通常不会,仍是顺序执行。需要明确的并发结构,例如 coroutineScope 中启动 async,再 await;同时定义失败与取消策略。
内容来源
- Android 智能硬件 SDK 技术 Wiki · 原条目
Q26