Kotlin面试题更新 2026-08-05

在 Android 开发中,如何将 OkHttp 与 Kotlin 协程结合使用?请说明其实现方式和注意事项。

编码实现风险判断技术原理KotlinOkHttp

考察说明

考查候选人对 OkHttp 网络请求与 Kotlin 协程的集成方式及异步处理的理解。

回答思路

  1. 【回答框架 1】在 Android 中使用 OkHttp 与协程结合,常见方式包括:使用 suspendCancellableCoroutine 将 OkHttp 的异步回调包装为挂起函数,或者使用 OkHttp 的 kotlin 扩展库(如 okhttp-coroutines)。包装时需要在回调中 resume 结果或异常,并处理协程取消。
  2. 【回答框架 2】具体实现:创建 suspend 函数,内部调用 OkHttp 的 enqueue 方法,在 onResponse 中 resume 响应,在 onFailure 中 resume 异常,并在协程取消时取消请求,例如通过 invokeOnCancellation 取消 call。
  3. 【回答框架 3】需注意 OkHttp 本身就是异步的,协程只是调整了线程调度和代码风格,不改变底层网络机制。默认回调运行在子线程,若需切回主线程可结合 Dispatchers.Main。
  4. 【关键点 1】使用 suspendCancellableCoroutine 包装 OkHttp 异步回调,实现挂起函数。
  5. 【关键点 2】协程取消时需取消 OkHttp 请求,避免资源浪费。
  6. 【关键点 3】网络请求仍在 OkHttp 的线程池中执行,协程仅控制挂起与恢复。
  7. 【关键点 4】注意线程切换,更新 UI 时需回到主线程。
  8. 【易错点 1】忘记处理协程取消导致请求继续执行或回调泄漏。
  9. 【易错点 2】在回调中直接 resume 可能因重复调用而崩溃。
  10. 【易错点 3】混淆 OkHttp 的线程模型与协程调度器,导致线程阻塞。