okHttp源码解析------待续
?
看該篇文章前首先要熟悉okHttp的使用,建議先讀OkHttp的簡單使用
本文的源碼解析參考鏈接:okhttp3總和解析
1.從URL請求處理開始分析
由異步將請求加入調(diào)度方法開始引入正題:
getClient().newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {}@Overridepublic void onResponse(Call call, Response response) throws IOException {} }); /*** Prepares the {@code request} to be executed at some point in the future.*/@Override public Call newCall(Request request) {return new RealCall(this, request);} @Override public void enqueue(Callback responseCallback) {enqueue(responseCallback, false);}void enqueue(Callback responseCallback, boolean forWebSocket) {synchronized (this) {if (executed) throw new IllegalStateException("Already Executed");executed = true;}client.dispatcher().enqueue(new AsyncCall(responseCallback, forWebSocket));}由源碼上的調(diào)用順序,我們將步驟轉(zhuǎn)化為以下的幾個技術(shù)點:
?
由以上的使用okhttp請求的調(diào)用代碼,可以看到最終的請求時通過dispatcher來完成的。
2.Dispatcher調(diào)度者
Dispatcher進(jìn)行線程分發(fā),有兩個方法,一個是普通的單線程,也就是線程阻塞的方式請求;另一種就是通過隊列進(jìn)行并發(fā)任務(wù)的分發(fā)和回調(diào),下面主要分析第二種:
?就是想到生成一個可緩存的線程池,實現(xiàn)高并發(fā)、低阻塞的任務(wù)調(diào)度。
?
3.Interceptor攔截器
攔截器主要用來觀察、修改、以及可能短路的清除輸出、和響應(yīng)的回來。
通常用來添加、移除或者轉(zhuǎn)換請求或者xiangying的頭部信息。比如將域名替換為ip地址,將請求頭中添加host屬性,也可以添加我們應(yīng)用中的一些公共參數(shù),比如設(shè)備id、版本號等等。
http://www.jianshu.com/p/2710ed1e6b48?
?
4.緩存策略
?
4.Socket管理(StreamAllocation)
?
5.HTTP請求序列化/反序列化
?
6計算機常識
?
轉(zhuǎn)載于:https://www.cnblogs.com/could-deng/p/6744974.html
總結(jié)
以上是生活随笔為你收集整理的okHttp源码解析------待续的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 线性代数第四章--向量组的线性相关性
- 下一篇: NS方程和组分方程