何时使用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
相关产品推荐
相关产品推荐

