<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      安卓筆記俠

      專注安卓開發(fā)

      導航

      OkHttp3源碼詳解(二) 整體流程

      1.簡單使用

      同步:

       1 @Override public Response execute() throws IOException {
       2   synchronized (this) {
       3     if (executed) throw new IllegalStateException("Already Executed");
       4     executed = true;
       5   }
       6   try {
       7     client.dispatcher().executed(this);
       8     Response result = getResponseWithInterceptorChain(false);
       9     if (result == null) throw new IOException("Canceled");
      10     return result;
      11   } finally {
      12     client.dispatcher().finished(this);
      13   }
      14 }

      首先加鎖置標志位,接著使用分配器的executed方法將call加入到同步隊列中,然后調(diào)用getResponseWithInterceptorChain方法(稍后分析)執(zhí)行http請求,最后調(diào)用finishied方法將call從同步隊列中刪除

      異步:

      1 void enqueue(Callback responseCallback, boolean forWebSocket) {
      2   synchronized (this) {
      3     if (executed) throw new IllegalStateException("Already Executed");
      4     executed = true;
      5   }
      6   client.dispatcher().enqueue(new AsyncCall(responseCallback, forWebSocket));
      7 }

      同樣先置標志位,然后將封裝的一個執(zhí)行體放到異步執(zhí)行隊列中。這里面引入了一個新的類AsyncCall,這個類繼承于NamedRunnable,實現(xiàn)了Runnable接口。NamedRunnable可以給當前的線程設置名字,并且用模板方法將線程的執(zhí)行體放到了execute方法中

      2.總體架構(gòu)

      上圖是OkHttp的總體架構(gòu),大致可以分為以下幾層:

      • Interface——接口層:接受網(wǎng)絡訪問請求
      • Protocol——協(xié)議層:處理協(xié)議邏輯
      • Connection——連接層:管理網(wǎng)絡連接,發(fā)送新的請求,接收服務器訪問
      • Cache——緩存層:管理本地緩存
      • I/O——I/O層:實際數(shù)據(jù)讀寫實現(xiàn)
      • Inteceptor——攔截器層:攔截網(wǎng)絡訪問,插入攔截邏輯

      ①Interface——接口層:

      接口層接收用戶的網(wǎng)絡訪問請求(同步請求/異步請求),發(fā)起實際的網(wǎng)絡訪問。OkHttpClient是OkHttp框架的客戶端,更確切的說是一個用戶面板。用戶使用OkHttp進行各種設置,發(fā)起各種網(wǎng)絡請求都是通過OkHttpClient完成的。每個OkHttpClient內(nèi)部都維護了屬于自己的任務隊列,連接池,Cache,攔截器等,所以在使用OkHttp作為網(wǎng)絡框架時應該全局共享一個OkHttpClient實例。

      Call描述一個實際的訪問請求,用戶的每一個網(wǎng)絡請求都是一個Call實例。Call本身只是一個接口,定義了Call的接口方法,實際執(zhí)行過程中,OkHttp會為每一個請求創(chuàng)建一個RealCall,每一個RealCall內(nèi)部有一個AsyncCallAsyncCall繼承的NamedRunnable繼承自Runnable接口。

      所以每一個Call就是一個線程,而執(zhí)行Call的過程就是執(zhí)行其execute方法的過程。

      Dispatcher是OkHttp的任務隊列,其內(nèi)部維護了一個線程池,當有接收到一個Call時,Dispatcher負責在線程池中找到空閑的線程并執(zhí)行其execute方法。這部分將會單獨拿一篇博客進行介紹,詳細內(nèi)容可參考本系列接下來的文章。

      ②.Protocol——協(xié)議層:處理協(xié)議邏輯

      Protocol層負責處理協(xié)議邏輯,OkHttp支持Http1/Http2/WebSocket協(xié)議,并在3.7版本中放棄了對Spdy協(xié)議,鼓勵開發(fā)者使用Http/2。

      ③.Connection——連接層:管理網(wǎng)絡連接,發(fā)送新的請求,接收服務器訪問

      連接層顧名思義就是負責網(wǎng)絡連接。在連接層中有一個連接池,統(tǒng)一管理所有的Socket連接,當用戶新發(fā)起一個網(wǎng)絡請求時,OkHttp會首先從連接池中查找是否有符合要求的連接,如果有則直接通過該連接發(fā)送網(wǎng)絡請求;否則新創(chuàng)建一個網(wǎng)絡連接。

      RealConnection描述一個物理Socket連接,連接池中維護多個RealConnection實例。由于Http/2支持多路復用,一個RealConnection可以支持多個網(wǎng)絡訪問請求,所以OkHttp又引入了StreamAllocation來描述一個實際的網(wǎng)絡請求開銷(從邏輯上一個Stream對應一個Call,但在實際網(wǎng)絡請求過程中一個Call常常涉及到多次請求。如重定向,Authenticate等場景。所以準確地說,一個Stream對應一次請求,而一個Call對應一組有邏輯關聯(lián)的Stream),一個RealConnection對應一個或多個StreamAllocation,所以StreamAllocation可以看做是RealConenction的計數(shù)器,當RealConnection的引用計數(shù)變?yōu)?,且長時間沒有被其他請求重新占用就將被釋放。

      連接層是OkHttp的核心部分,這部分當然也會單獨拿一篇博客詳細講解,詳細內(nèi)容可參考本專題相關文章。

      ④.Cache——緩存層:管理本地緩存

      Cache層負責維護請求緩存,當用戶的網(wǎng)絡請求在本地已有符合要求的緩存時,OkHttp會直接從緩存中返回結(jié)果,從而節(jié)省網(wǎng)絡開銷。這部分內(nèi)容也會單獨拿一篇博客進行介紹,詳細內(nèi)容可參考本專題相關文章。

      ⑤.I/O——I/O層:實際數(shù)據(jù)讀寫實現(xiàn)

      I/O層負責實際的數(shù)據(jù)讀寫。OkHttp的另一大有點就是其高效的I/O操作,這歸因于其高效的I/O庫okio

      這部分內(nèi)容筆者也打算另開一個專題進行介紹。詳細內(nèi)容可以參考本博客相關內(nèi)容。

      ⑥Inteceptor——攔截器層:攔截網(wǎng)絡訪問,插入攔截邏輯

      攔截器層提供了一個類AOP接口,方便用戶可以切入到各個層面對網(wǎng)絡訪問進行攔截并執(zhí)行相關邏輯。



      posted on 2016-11-03 01:17  安卓筆記俠  閱讀(583)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 亚洲一区二区三区色视频| 日韩高清亚洲日韩精品一区二区| 亚洲色www成人永久网址| 一区二区三区av在线观看| 鲜嫩高中生无套进入| 亚洲精品国产av成人网| 自拍偷自拍亚洲精品情侣| 999福利激情视频| 国产精品自在拍首页视频8| 久久99精品久久久大学生| 免费午夜无码片在线观看影院| 亚洲欧美成人久久综合中文网 | 弥勒县| 国内精品久久久久影院薰衣草| 亚洲在av极品无码天堂| 精品无码久久久久久尤物| 精品一区二区三区无码视频| 精品一日韩美女性夜视频| 亚洲春色在线视频| 99久久99久久久精品久久| 五月综合网亚洲乱妇久久| 麻豆精品一区二区三区蜜臀| 日韩亚洲欧美中文高清| 天天爽夜夜爱| 国产精品视频免费一区二区三区 | 亚洲欧美综合一区二区三区| 国产高潮视频在线观看| 中文字幕亚洲人妻系列| 亚洲另类激情专区小说婷婷久| 久久爱在线视频在线观看| 国产乱码精品一品二品| 国产福利片无码区在线观看| 91偷自国产一区二区三区| 日韩成人一区二区三区在线观看| 读书| 亚洲aⅴ无码专区在线观看q| 亚洲欧美精品在线| 亚洲国产中文字幕精品| 久色伊人激情文学你懂的| 97人妻免费碰视频碰免| 少妇真人直播免费视频|