Kotlin面试题更新 2026-08-05

请描述 Kotlin 协程在 Android 中从被调用到运行的整个过程,包括构建、调度以及最终的执行链路。

问题拆解技术原理AndroidKotlin

考察说明

考察对 Kotlin 协程生命周期和调度机制的理解。

回答思路

  1. 【回答框架 1】协程的创建入口是 launch 或 async 等构建器,它们接收调度器、协程上下文和启动模式等参数,并返回一个 Job 或 Deferred。
  2. 【回答框架 2】构建器会创建协程体并包装成 CoroutineScope 的扩展,通过拦截器将协程体封装为 DispatchedCoroutine,并启动协程。
  3. 【回答框架 3】调度器(如 Dispatchers.Main)通过 CoroutineDispatcher 的 dispatch 方法将协程任务分发到对应的线程池或主线程的消息队列中。
  4. 【回答框架 4】协程内部状态机在每次挂起点记录状态,恢复时根据 continuation 继续执行,最终完成时回调 Job 的完成通知。
  5. 【回答框架 5】整个过程中,协程的上下文(异常处理器、Job、拦截器)通过组合方式传递,确保结构化并发和取消传播。
  6. 【关键点 1】launch 和 async 是协程的入口,返回 Job 或 Deferred,需指定调度器和上下文。
  7. 【关键点 2】协程通过拦截器封装后,由调度器分发到线程或主线程队列执行。
  8. 【关键点 3】协程内部是状态机,挂起函数通过 continuation 恢复,实现非阻塞的异步流程。
  9. 【关键点 4】协程的启动模式(如 DEFAULT、LAZY)决定了是否立即调度执行。
  10. 【易错点 1】不要将协程的创建与启动混淆,构建器创建后可能不立即执行,取决于启动模式和调度器。
  11. 【易错点 2】主线程和 IO 线程的调度方式不同,Dispatchers.Main 通过 Handler 分发,而 Default/IO 使用线程池。
  12. 【易错点 3】取消协程后,其内部挂起函数需响应取消异常,否则可能不立即停止。