Okhttp

一、什么是Okhttp,用來干什么

OKHttp是一個網(wǎng)絡(luò)請求框架,一般用來網(wǎng)絡(luò)請求數(shù)據(jù),圖片,文件的上傳下載。

二、請求流程e

當OkHttpClient對象想要發(fā)送一個網(wǎng)絡(luò)請求的時會執(zhí)行newCall()方法這是我們將Request放在這個方法里邊,并調(diào)用enqueue()異步方法調(diào)用這個異步方法會實現(xiàn)Call接口,在源碼里邊,RealCall是Call接口的實現(xiàn)類,也就是說獲取這個異步任務的是ReallCall,ReallCall會把這個異步任務交給他的內(nèi)部類AcycCall ?AcyCall是NamedRunnable的實現(xiàn)類,NamedRunnable實現(xiàn)了Runnanle接口,通俗易懂省的說AcyCall是一個子線程,在AcynCall這個類里邊有一個enqueye()的方法 ?,這時AcynCall 又將任務交給dispatcher去執(zhí)行入隊操作,而且這里還有一個getResponsewithIntertorchan()這個方法是真正拿到響應并且通過接口回調(diào)返回給OkHttpClient對象()

Dispatcher這個類是異步任務調(diào)度器,在這個類里邊有一個不限制線程數(shù)量的一個線程池,也就是說 dispatcher在線程池里邊開啟了一個子線程去執(zhí)行這個異步任務并進行處理,

處理完畢后他會把處理完的數(shù)據(jù)交給getResponsewithIntertorchan()這個方法里邊,是一系列的攔截器,

首先請求會經(jīng)過第一個攔截器,

應用攔截器,當用戶沒有設(shè)置應用攔截器的時候就會跳過這個攔截器,去執(zhí)行RetryAndFollowUpInterceptor

后繼攔截器,后繼攔截器的功能主要是處理重定向和處理失敗重連這兩個操作,

先說他是如何處理重定向,在RetryAndFollowUpInterceptor

后繼攔截器里邊的Interceptor()攔截方法里邊有一個UserResponse類,并從StreamAllocation類里邊獲取連接

然后獲取到當前請求的響應碼,進行一系列的響應碼的Swicth()判斷,判斷如果包含301響應碼的時候,就去執(zhí)行重定向操作,并且構(gòu)造出一個Request(),如果沒有激發(fā)重定向操作會直接返回Response

失敗重連是在StreamAllocaltion里的連接池里邊獲取連接后執(zhí)行的失敗重連操作,重定向和連接超時都只能執(zhí)行20次并拋出異常。

然后進行下一個攔截器BridgeInterceptor橋接攔截器?

橋接攔截器有兩個階段;

請求階段:在請求階段的時候會自動補全當前請求的請求頭,讓當前的請求成為真正可以發(fā)送規(guī)范的Request

響應階段:在響應階段他會進行GZIP操作,GZIP是一種對響應進行加速的處理,服務器通過壓縮,我們通過解壓縮的形式來對響應進行加速

然后執(zhí)行下一個攔截器

CacheInterceptor緩存攔截器

緩存攔截器也分為兩個階段,

請求階段:請求階段對緩存進行判斷,判斷緩存如果有緩存就使用緩存并且返回Response

響應階段:如果沒有緩存通過DiskCache類將響應的數(shù)據(jù)進行緩存

然后執(zhí)行下一個攔截器

ConnectInterceptor ?連接攔截器??

連接攔截器就是打開TCP連接然后執(zhí)行最后一個攔截器

ServiceInterceptor ?執(zhí)行服務攔截器

這個攔截器是真正發(fā)送網(wǎng)絡(luò)請求并且返回Response

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 那么我今天給大家簡單地講一下Okhttp這款網(wǎng)絡(luò)框架及其原理。它是如何請求數(shù)據(jù),如何響應數(shù)據(jù)的 有什么優(yōu)點?它的應...
    卓而不群_0137閱讀 348評論 0 1
  • 關(guān)于okhttp是一款優(yōu)秀的網(wǎng)絡(luò)請求框架,關(guān)于它的源碼分析文章有很多,這里分享我在學習過程中讀到的感覺比較好的文章...
    蕉下孤客閱讀 3,734評論 2 38
  • 本文為本人原創(chuàng),轉(zhuǎn)載請注明作者和出處。 在上一章我們分析了Okhttp分發(fā)器對同步/異步請求的處理,本章將和大家一...
    業(yè)松閱讀 1,050評論 2 8
  • 2.okhttp3.0整體流程:1).創(chuàng)建okhttpclient客戶端對象,表示所有的http請求的客戶端的類,...
    無為3閱讀 448評論 0 1
  • 如果心理學有這樣一個概念,姑且認為它對。把對別人行為的折射,反映在自己的心緒上,并且和自己和解。也許這是塵世中的一...
    js92閱讀 243評論 0 0

友情鏈接更多精彩內(nèi)容