OKHttp架構(gòu)簡析

從創(chuàng)建到使用:

  • 創(chuàng)建一個OkHttpClient
  • 構(gòu)建一個Request
  • 構(gòu)建一個Call
  • 最后Call回調(diào)

OkHttpClient

一開始構(gòu)建一個OKHttpClient谱醇,Builder構(gòu)建者模式资盅;里面有幾個重要參數(shù):

  • 任務分發(fā)器
  • 連接池
  • 重試次數(shù)
  • 攔截器

任務分發(fā)器

  • 最多同時請求數(shù)量
    • 默認 64
  • 同一個host同時最多請求
    • 默認 2
  • 線程池
    • 執(zhí)行網(wǎng)絡請求任務
    • 默認最多為Integer.MAX_VALUE個線程
    • 沒有核心線程
  • 等待執(zhí)行隊列
    • 緩沖等待
  • 正在執(zhí)行隊列
    • 執(zhí)行
    • 執(zhí)行異步任務的時候 先判斷當前執(zhí)行任務的隊列是否超過64 ,并且當前請求的host對應的請求數(shù)是否超過2;
    • 沒有就加到執(zhí)行隊列氧枣,同時放到線程池執(zhí)行;
      • 執(zhí)行完成后回調(diào)回來箱硕;
      • 從執(zhí)行隊列中移除該請求期揪,同時對兩個隊列進行判斷,一旦執(zhí)行隊列不到64晦款, 就從等待隊列中移除出來添加到執(zhí)行隊列炎功,同時添加到線程池執(zhí)行;
    • 有就加在等待隊列缓溅;

連接池

  • HttpConnection連接對象
    • 使用的時候(也就是創(chuàng)建連接)蛇损,創(chuàng)建一個Socket連接,指定host和端口號;使用編碼器HttpCodec拼接參數(shù)淤齐,構(gòu)建請求體[請求行股囊、http請求頭、http請求體]更啄,然后寫出稚疹,請求;請求后返回輸入流锈死;
  • 每個鏈接的最大存活時間
  • 垃圾回收池
    • 構(gòu)建一個線程池贫堰,當創(chuàng)建連接后,就啟動垃圾回收池待牵,判斷連接對象的最后時候時間其屏,與當前的時間差是否超過最大存存活時間,超多就銷毀一個連接對象缨该,[退出Socket連接]
  • 連接對象容器
    • 管理所有的連接對象偎行,超過最大存活時間就銷毀一個連接對象

重試次數(shù)

攔截器

內(nèi)部是鏈式連接的

  • 自定義攔截器
  • 重試攔截器
    • 如果攔截失敗就重試,上面設置了重試次數(shù)贰拿,成功了就返回整個鏈維持的那個Response對象
  • 頭部攔截器
  • 連接攔截器
  • 呼叫服務攔截器

將所有的攔截器放到一個List中蛤袒,然后創(chuàng)建一個鏈,將這個List放到鏈中膨更;鏈的長度等于List的長度妙真;鏈始終維持一個對象,那就是Response荚守;在連接攔截器中組裝所有的參數(shù)珍德,在最后的請求服務攔截器中,創(chuàng)建或者復用Socket矗漾,發(fā)出請求并獲取結(jié)果锈候。

Request

Builder模式構(gòu)造參數(shù)

  • 請求頭
  • 請求方式
  • 請求體
    • 對請求參數(shù)進行拼接存儲,供連接攔截器使用
  • url封裝體
    • 對一個Url解析獲取host敞贡、資源定位泵琳、協(xié)議、端口
      整個Request供連接攔截器使用誊役,拼裝請求報文

Call

構(gòu)建一個Call获列,持有Request和Client,Request蛔垢;

同步/異步回調(diào)

回調(diào)的時候击孩,構(gòu)建一個Runnable,將Callback傳到調(diào)度器的執(zhí)行方法中啦桌,callback進行回調(diào)溯壶,創(chuàng)建Runnable的時候,構(gòu)建了攔截器甫男,同時將自身傳入到了鏈中這樣鏈就持有了Call中的request且改,在構(gòu)建連接攔截器的時候就能夠拿到拼接參數(shù);Client屬性同樣在連接攔截器中用于從復用池中獲取連接對象板驳,重連攔截器中獲取重連次數(shù)又跛,以及最終執(zhí)行完成后回調(diào)分發(fā)器中的回調(diào),還有獲取傳入進來的自定義攔截器若治。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末慨蓝,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子端幼,更是在濱河造成了極大的恐慌礼烈,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件婆跑,死亡現(xiàn)場離奇詭異此熬,居然都是意外死亡,警方通過查閱死者的電腦和手機滑进,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門犀忱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人扶关,你說我怎么就攤上這事阴汇。” “怎么了节槐?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵搀庶,是天一觀的道長。 經(jīng)常有香客問我疯淫,道長地来,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任熙掺,我火速辦了婚禮未斑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘币绩。我一直安慰自己蜡秽,他們只是感情好,可當我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布缆镣。 她就那樣靜靜地躺著芽突,像睡著了一般。 火紅的嫁衣襯著肌膚如雪董瞻。 梳的紋絲不亂的頭發(fā)上寞蚌,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天田巴,我揣著相機與錄音,去河邊找鬼挟秤。 笑死壹哺,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的艘刚。 我是一名探鬼主播管宵,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼攀甚!你這毒婦竟也來了箩朴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤秋度,失蹤者是張志新(化名)和其女友劉穎炸庞,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體荚斯,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡燕雁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了鲸拥。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拐格。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖刑赶,靈堂內(nèi)的尸體忽然破棺而出捏浊,到底是詐尸還是另有隱情,我是刑警寧澤撞叨,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布金踪,位于F島的核電站,受9級特大地震影響牵敷,放射性物質(zhì)發(fā)生泄漏胡岔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一枷餐、第九天 我趴在偏房一處隱蔽的房頂上張望靶瘸。 院中可真熱鬧,春花似錦毛肋、人聲如沸怨咪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诗眨。三九已至,卻和暖如春孕讳,著一層夾襖步出監(jiān)牢的瞬間匠楚,已是汗流浹背巍膘。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留芋簿,地道東北人典徘。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像益咬,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子帜平,可洞房花燭夜當晚...
    茶點故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內(nèi)容