okhttp初識攔截器

攔截器流程:網絡

簡單回顧同步 / 異步:異步

同步請求就是執行請求的操做是阻塞式,直到HTTP響應返回。spa

異步請求就相似於非阻塞式的請求,它的執行結果通常都是經過接口回調的方式告知調用者。 3d

okHttp攔截器:blog

來自官網的解釋:攔截器是OkHttp中提供一種強大的機制,它能夠實現網絡監聽、請求以及響應重寫、請求失敗重試等功能。接口

下面來看一下官網的一張介紹攔截器的圖:同步

其中Okhttp包含Application Interceptors【應用攔截器】、系統攔截器、Network Interceptors【網絡攔截器】,其中我們接下來要分析的就是從系統自帶的攔截器開始,那系統攔截器都有哪些呢,以下圖:源碼

關於這些系統攔截器在接下來會一一進行詳細分析的,目前先有個大體的印象。io

攔截器鏈介紹:循環

有了上面的理論瞭解以後,下面則從源碼的角度來對攔截器進行一個進一步瞭解,這裏以同步請求爲例,由於異步請求關於攔截器這塊基本上同樣:

進一步定位:

那接下來將注意力集中在RealInterceptorChain.proceed()方法中:

而後此時在這個方法中有個核心代碼:

這樣就將若干個攔截器以鏈式的方式進行執行,這也是攔截器鏈的主要做用。下面總結一下攔截器:

一、建立一系列的攔截器,並將其放入到一個攔截器list中。

二、建立一個攔截器鏈RealInterceptorChain,並執行攔截器鏈的proceed方法。

那目前對於攔截器怎麼鏈起來的有了一個大局觀,那到底每一個攔截器是怎麼來銜接的呢?這裏以一個具體的攔載器爲例初步進行分析:RetryAndFollowUpInterceptor:

因此將目光集中在這個方法之上,代碼比較多,這裏先只看核心的:

而如以前所分析,咱們知道RealInterceptorChain在proceed()方法中又會去獲取下一個攔截器繼續往下鏈,以下:

如此循環,就會將全部的攔截器依順序一個個去執行完成,這也就是攔截器的一個核心實現邏輯。因此下面對攔截器的具體邏輯再總結一下:

一、在發起請求前對request進行處理。

二、調用下一個攔截器,獲取response。

三、對response進行處理,返回給上一個攔截器。

相關文章
相關標籤/搜索