開源框架相關面試問題-okhttp網絡框架面試問題詳解

OkHttp使用簡介:緩存

①、準備OkHttpClient對象:
網絡

通常app中使用網絡能夠所有用它,能夠將它弄爲全局變量,這樣就能夠共用它的緩存和線程池了。app

②、準備Request對象:
異步

很顯然它是採用Builder模式來構形成,它封裝了請求地址、請求方法、請求頭、請求體和標誌位信息:
ui

③、發起請求:分爲同步請求和異步請求:
同步請求:會阻塞UI線程。
spa

異步請求:也就是不會阻塞UI線程,在子線程中執行的。
線程

 總結:3d

  • 建立一個OkHttpClient對象。
  • 建立一個Request對象,經過內部類Builder調用生成Request對象。
  • 建立一個Call對象,調用execute【同步請求】 / enqueue【異步請求】。

OkHttp源碼剖析:對象

在分析源碼以前先來看一張圖:
blog

程序會發一個Request請求給OkHttp的核心層進行處理,而在Okhttp中有一個最重要的概念:攔截器,它會將請求攔截以後再分發response給應用層,大致是這麼一個過程。下面先來分析一下同步請求:

因爲前兩步比較簡單,直接分析第三步:

先看一下newCall方法是作了啥事:

其實是生成了一個RealCall對象,因此最終execute()方法的執行就是在RealCall裏面,定位到它:

下面分析一下它的實現:

下面具體來看一下:

這裏以CallServerInterceptor攔截器爲例進行分析:

因此說它的底層其實也就是用基礎的東東來進行封裝滴。

接下來再來看一下它的異步請求:

因此進去看一下:

這個類中有三個重要的集合:



下面用圖來表示一下其整個過程:

相關文章
相關標籤/搜索