1.創(chuàng)建OkHttp的時(shí)候 構(gòu)造就會(huì)給我們new Builder()方法

這個(gè)方法中我們創(chuàng)建了一個(gè)Dispatcher分發(fā)器


這個(gè)Dispatcher分發(fā)器會(huì)自動(dòng)創(chuàng)建runningAsyncCalls異步等待對(duì)列
和runningSyncCalls同步等待對(duì)列

2. 創(chuàng)建請(qǐng)求對(duì)象

3.通過(guò)okhttp對(duì)象.newCall(請(qǐng)求對(duì)象) 獲取call對(duì)象
通過(guò)call對(duì)象調(diào)用 同步或者異步 發(fā)起網(wǎng)絡(luò)請(qǐng)求
Call 的實(shí)現(xiàn)類(lèi) RealCall
因?yàn)?Call 是接口,內(nèi)部定義了同步與異步的請(qǐng)求,
以及取消請(qǐng)求等操作,這些操作是由 RealCall 真正去實(shí)現(xiàn)的。
同步:call對(duì)象.execute()

源碼詳解:
通過(guò)OkHttpClient對(duì)象調(diào)用分發(fā)器方法調(diào)用executed()方法
把所有的RealCall對(duì)象(RealCall繼承與Call)添加到同步等待對(duì)列

然后依次執(zhí)行
同時(shí)調(diào)用了getResponseWithInterceptorChain()攔截器方法()
依次執(zhí)行7個(gè)攔截器? 再循環(huán) 返回Response對(duì)象 如果一個(gè)攔截器出錯(cuò)誤
那么就沒(méi)有數(shù)據(jù)

攔截器方法:

獲取數(shù)據(jù):通過(guò)同步對(duì)象.body().string();
.body()從Response.body()中取值
當(dāng)調(diào)用數(shù)據(jù)以后再次調(diào)用會(huì)報(bào)錯(cuò) 因?yàn)槲覀冋{(diào)用一次后
okhttp關(guān)閉讀取流 所有就無(wú)法重復(fù)調(diào)用
異步:?

源碼詳解:
通過(guò)OkHttpClient對(duì)象調(diào)用分發(fā)器方法調(diào)用enqueue(new AsyncCall(接口回調(diào)))方法

RealCal內(nèi)部有executeOn(線程池)方法 execute()處理數(shù)據(jù)? 給responseCallback賦值

當(dāng)我們調(diào)用AsyncCall這個(gè)接口 會(huì)自動(dòng)調(diào)用executeOn方法 同時(shí)接口回調(diào)賦值給我們
client對(duì)象responseCallback 返回給兩個(gè)方法數(shù)據(jù)


當(dāng)調(diào)用數(shù)據(jù)以后再次調(diào)用會(huì)報(bào)錯(cuò) 因?yàn)槲覀冋{(diào)用一次后
okhttp關(guān)閉讀取流 所有就無(wú)法重復(fù)調(diào)用