(1)宁玫、當(dāng)我們通過(guò)OkhttpClient創(chuàng)立一個(gè)Call粗恢,并發(fā)起同步或者異步請(qǐng)求時(shí);
(2)欧瘪、okhttp會(huì)通過(guò)Dispatcher對(duì)我們所有的RealCall(Call的具體實(shí)現(xiàn)類(lèi))進(jìn)行統(tǒng)一管理眷射,并通過(guò)execute()及enqueue()方法對(duì)同步或者異步請(qǐng)求進(jìn)行解決;
(3)佛掖、execute()及enqueue()這兩個(gè)方法會(huì)最終調(diào)用RealCall中的getResponseWithInterceptorChain()方法妖碉,從阻攔器鏈中獲取返回結(jié)果;
(4)芥被、阻攔器鏈中欧宜,依次通過(guò)RetryAndFollowUpInterceptor(重定向阻攔器)、BridgeInterceptor(橋接阻攔器)拴魄、CacheInterceptor(緩存阻攔器)鱼鸠、ConnectInterceptor(連接阻攔器)猛拴、CallServerInterceptor(網(wǎng)絡(luò)阻攔器)對(duì)請(qǐng)求依次解決,與服務(wù)的建立連接后蚀狰,獲取返回?cái)?shù)據(jù)愉昆,再經(jīng)過(guò)上述阻攔器依次解決后,最后將結(jié)果返回給調(diào)用方麻蹋。
我們可以通過(guò)一張簡(jiǎn)單的流程圖來(lái)看一下基本的流程:
最后跛溉,調(diào)用了攔截器鏈chain的proceed(Request)方法:
該方法返回Response正是調(diào)用者需要的服務(wù)器端的響應(yīng)結(jié)果