You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

何时使用okhttp-coroutines-jvm?Retrofit原生支持Kotlin协程吗?

OkHttp协程依赖适用场景与Retrofit协程支持说明

一、okhttp-coroutines与okhttp-coroutines-jvm的适用场景

这两个依赖是Kotlin多平台体系下的产物:okhttp-coroutines是多平台模块的公共声明,okhttp-coroutines-jvm是针对JVM/Android平台的具体实现。它们的核心作用是给OkHttp的Call对象提供Kotlin协程挂起函数扩展,适用场景包括:

  • 直接使用OkHttp客户端发起请求时,想用协程挂起函数替代传统的Callback回调,避免回调嵌套。比如通过Call.await()挂起函数,在协程作用域内以同步写法完成异步网络请求,代码更简洁易读。
  • 若你在Kotlin多平台项目中使用OkHttp,引入okhttp-coroutines即可,它会自动根据目标平台(如JVM、iOS等)适配对应的实现;若你是纯JVM/Android项目,直接引入okhttp-coroutines-jvm更直接,或者通过OkHttp的BOM管理依赖时,引入okhttp-coroutines也能自动拉取JVM平台的对应依赖。
  • 典型使用场景:在Android的ViewModel协程作用域中,直接调用okHttpClient.newCall(request).await()获取响应,无需处理Callback的线程切换与嵌套。

二、Retrofit对Kotlin协程的支持情况

Retrofit从2.6.0版本开始原生支持Kotlin协程,无需额外依赖OkHttp的协程库(除非你还要直接使用OkHttp的协程扩展能力):

  • 只需在Retrofit接口中定义挂起函数即可实现协程调用,示例代码如下:
    interface ApiService {
        @GET("users/{id}")
        suspend fun getUser(@Path("id") id: String): User
    }
    
  • Retrofit内部会自动处理协程调度:将网络请求切换到后台线程执行,请求完成后自动将结果回调到调用协程的线程(比如Android中使用viewModelScope时,结果会切回主线程)。
  • 这种情况下,Retrofit已经封装了协程的异步逻辑,不需要你手动调用OkHttp的await()方法。

内容的提问来源于stack exchange,提问作者NanoNova

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 15:32:14