简洁易懂的 OkHttp 请求的流程源码分析

本文为 OkHttp 的第一篇文章,主要是对整个请求的流程的梳理,对 OkHttp 整体有一个感性的认识。

本文基于 OkHttp 最新的 4.8.1版本进行源分析的,源码是 Kotlin 写的,做好准备。

依赖

implementation 'com.squareup.okhttp3:okhttp:4.8.1'

整体流程

先写一个 Demo 作为源码分析的入口,首先分析异步请求的整体流程,然后再看同步请求的整体流程,从整体上把握 OkHttp 的请求流程

1.OkHttp 的基本使用

class OkHttpActivity : AppCompatActivity() {
   
    override fun onCreate(savedInstanceState: Bundle?) {
   
        super.onCreate(savedInstanceState)
        //1 请求的 Client
        val okHttpClient = OkHttpClient()
        //2 构造出一个 Request 对象
        val request = Request.Builder()
            //API 接口由 wanandroid.com 提供
            .url("https://wanandroid.com/wxarticle/chapters/json")
            .get()
            .build()
        //3 创建出一个执行的 Call 对象
        val call = okHttpClient.newCall(request)
        //4 异步执行请求
        call.enqueue(object : Callback {
   
            override fun onFailure(call: Call, e: IOException) {
   
                e.printStackTrace()
            }

            override fun onResponse(call: Call, response: Response) {
   
                "response.code = ${response.code}".log()
            }
        })
    }
}

以上就是 OkHttp 的最基本的用法,接口请求的是鸿洋提供的玩Android 开放API

注释 1:实例化一个OkHttpClient对象,用来配置请求的 interceptors(插值器)读写超时时间等配置,其实通过内部类 Builder 构建的,内部会初始化一个 Dispatcher 对象,下面会用到。

//OkHttpClient.kt
constructor() : this(Builder())
// OkHttpClient内部的Builder类,通过
class Builder constructor() {
   
  //调度器
	internal var dispatcher: Dispatcher = Dispatcher()
  //拦截器 list
	internal val interceptors: MutableList<Interceptor> = mutableListOf()
  //网络拦截器 list
	internal val networkInterceptors: MutableList<Interceptor> = mutableListOf()
	internal var eventListenerFactory: EventListener.Factory = EventListener.NONE.asFactory()
	internal var retryOnConnectionFailure = true
	internal var connectTimeout = 10_000
	internal var readTimeo
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值