1. 为什么需要协程
Android 主线程(UI 线程)不能做耗时操作,否则会掉帧甚至 ANR。早年我们靠 回调(Callback) 和 RxJava 处理异步,但它们都有痛点:
- 回调地狱:多层嵌套,错误处理散落各处,代码向右无限缩进。
- RxJava 学习曲线陡:操作符众多,线程切换(
subscribeOn/observeOn)心智负担重。 - 线程昂贵:传统线程开销大,开几千个就扛不住。
协程(Coroutine)用「同步的写法」写出「异步的逻辑」:不阻塞线程、用 suspend 标记可挂起、用 delay 代替 Thread.sleep,读起来就是从上到下的顺序代码。
一句话
协程是「轻量级的、可挂起的计算任务」,跑在线程上但比线程便宜得多(一个线程能跑几万个协程)。