OkHttp的主要工作流程

相关文章:

okhttp的主要工作流程以及源码的解析

OkHttp源码分析(3)- Dispatcher - 线程资源管理和分配

OkHttp是如何进行网络请求的

由图可知,从call发起异步请求到CallBack回调成功,有三个步骤。

总结:

第一步,创建Request和OkHttpClicent对象,然后将Request封装成Call对象,然后调用enqueue()方法执行异步请求;

第二步,Dispatcher的enqueue(AsyncCall)和promoteAndExecute()方法,enqueue(AsyncCall)有两个作用:一是添加AsyncCall到预执行队列readyAsyncCalls,二是设置同一Host的连接计数器;promoteAndExecute()负责真正对AsyncCall进行资源的调度:对readyAsyncCalls进行迭代循环,如果正在执行的队列size不超过64且同一Host的连接计数器的值不超过5,就将这个请求放入到runningAsyncCalls。然后遍历runningAsyncCalls,挨个执行里面的请求,见下图

第三步,AsyncCall对象把自己作为任务交到线程池执行,提交成功后就finish掉,见下图

 

 

 

具体的代码,暂时不用看:

1.通过Call发起网络请求的准备工作

1.1 通过构造者模式添加 url,method,header,body 等完成一个请求的信息 Request 对象

        val request = Request.Builder()
                .url("")
                .addHeader("","")
                .get()
                .build()

1.2 同样通过构造者模式创建一个 OkHttpClicent 实例,可以按需配置

        val okHttpClient = OkHttpClient.Builder()
                .connectTimeout(15, TimeUnit.SECONDS)
                .readTimeout(15, TimeUnit.SECONDS)
                .addInterceptor()
                .build()

1.3 将Request 封装成 Call 对象并且发起网络请求

 val call = okHttpClient.newCall(request)
 //异步请求数据
 call.enqueue(object :Callback{
    override fun onFailure(call: Call, e: IOException) {}
    override fun onResponse(call: Call, response: Response) {}
 })
 //同步请求数据
 val response =  call.execute()

整个使用流程很简单,主要的地方在于如何通过 Call 对象发起同/异步请求,后续的源码追踪以方法开始。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值