OKHttp -- 工作流程分析

圖1:工作流程圖

工作分析:

1、創(chuàng)建Call

同步:

2、將Call直接添加到Dispatcher的runningAsyncCalls隊列中,同時
3、調(diào)用getResponseWithInterceptorChain進入鏈式工作流程
4、將Response返回給調(diào)用者
5、調(diào)用Dispatcher的finish移除該Call,并調(diào)用promoteCalls檢查隊列,執(zhí)行等待的請求

異步

2、將使用Callback為參數(shù)創(chuàng)建AsyncCall對象,并將其添加到Dispatcher的隊列中,等待隊列執(zhí)行
3、隊列中取出待執(zhí)行的請求,使用線程池執(zhí)行AsyncCall(繼承Runnable),執(zhí)行g(shù)etResponseWithInterceptorChain,并將結(jié)果通過callback返回

Dispatcher中的三個隊列:

  • readyAsyncCalls:準備運行的異步請求
  • runningAsyncCalls:正在運行的異步請求
  • runningSyncCalls:正在運行的同步請求

getResponseWithInterceptorChain中攔截器的工作分析

鏈的工作流程:
1、在getResponseWithInterceptorChain創(chuàng)建鏈條,并執(zhí)行proceed方法 (圖2所示)
2、在鏈條的proceed方法中,取出攔截器,并調(diào)用攔截器的intercept方法(圖3所示)
3、intercept方法中,對請求進行處理,然后通過鏈條的proceed獲取返回(圖4所示)
4、此時的鏈條的index已經(jīng)加1,proceed中拿到下一個攔截器,然后執(zhí)行第3步;如此遞歸到最后一個攔截器執(zhí)行第5步
5、最后一個攔截器獲取到返回之后,依次遞歸,每個攔截器去處理返回的response,然后返回給上一個攔截器處理
6、執(zhí)行到最后回到第一個鏈的起點,把數(shù)據(jù)返回給對應(yīng)的調(diào)用(圖2的retrun)

圖2:創(chuàng)建鏈并開始執(zhí)行的代碼
圖3:proceed方法的主要代碼

圖4:Interceptor的intercept方法

對于每個攔截器的功能可以查看上一篇文章OKHttp -- 結(jié)構(gòu)分析

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

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

  • 1、OkHttp 的基本使用 OkHttp 是 Square 的一款應(yīng)用于 Android 和 Java 的 Ht...
    開發(fā)者如是說閱讀 1,013評論 0 14
  • OkHttp源碼分析 在現(xiàn)在的Android開發(fā)中,請求網(wǎng)絡(luò)獲取數(shù)據(jù)基本上成了我們的標配。在早期的Android開...
    BlackFlag閱讀 418評論 0 5
  • 1、說明 經(jīng)翻譯之后的結(jié)果如下HTTP是現(xiàn)代應(yīng)用網(wǎng)絡(luò)的方式。這是我們交換數(shù)據(jù)和媒體的方式。高效地執(zhí)行HTTP可以使...
    Kevin_Lv閱讀 485評論 0 1
  • 前言 用OkHttp很久了,也看了很多人寫的源碼分析,在這里結(jié)合自己的感悟,記錄一下對OkHttp源碼理解的幾點心...
    Java小鋪閱讀 1,612評論 0 13
  • 這篇文章主要講 Android 網(wǎng)絡(luò)請求時所使用到的各個請求庫的關(guān)系,以及 OkHttp3 的介紹。(如理解有誤,...
    小莊bb閱讀 1,336評論 0 4

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