2019-06-12

OkHttp同步方法總結(jié)

1.創(chuàng)建OkHttpClirnt和Request對象 慎玖,通過Builder模式創(chuàng)建

2.將Request封裝成Call對象

3.調(diào)用Call的execute()發(fā)送同步請求

OkHttp同步需要注意

發(fā)送請求后贾铝,就會進(jìn)入阻塞狀態(tài),知道收到響應(yīng)屈糊。

異步:

1.創(chuàng)建OkHttpClirnt和Request對象 九孩,通過Builder模式創(chuàng)建

2.將Request封裝成Call對象

3.調(diào)用Call的enqueue()發(fā)送異步請求

開啟一個新的線程

區(qū)別:

發(fā)送請求的方法調(diào)用

阻塞線程與否,同步會何之,異步不會菇怀,會開啟一個新的線程

同步流程:

異步流程:

1.判斷當(dāng)前call

2.封住成一個AsyncCall對象

3.client.dispatcher().enqueue()

發(fā)送同步和異步都會有dispatcher完成

dispatcher的作用為維護(hù)請求的狀態(tài)凭舶,并維護(hù)一個線程池,用于執(zhí)行請求爱沟。


攔截器

創(chuàng)建一系列攔截器帅霜,并將攔截器放入到一個List集合中

創(chuàng)建一個攔截器鏈ReallnterceptorChain,并執(zhí)行攔截器鏈的proceed方法呼伸。


1.發(fā)起請求前對request進(jìn)行處理

2.調(diào)用下一個攔截器身冀,獲取respone

對respone進(jìn)行處理,返回給上一個攔截器


重定向攔截器

創(chuàng)建StreamAllocation對象

調(diào)用ReallnterceptorChain.proceed()進(jìn)行網(wǎng)絡(luò)請求

根據(jù)異常結(jié)果或者響應(yīng)結(jié)果判斷 是否進(jìn)行重新請求

調(diào)用下一個攔截器,對respone進(jìn)行處理搂根,返回給上一個攔截器

BridgeInterceptor橋接攔截器

1.是負(fù)責(zé)將用戶構(gòu)建的一個Request請求轉(zhuǎn)化為能夠進(jìn)行網(wǎng)絡(luò)訪問的請求

2.將這個符合網(wǎng)絡(luò)請求的Request進(jìn)行網(wǎng)絡(luò)請求

3.將網(wǎng)絡(luò)請求回來的響應(yīng)Resuest轉(zhuǎn)化為用戶 可用的Response珍促。

緩存策略

如何使用:創(chuàng)建OkhttpClient創(chuàng)建cache進(jìn)行緩存

Cache的put方法

DisklruCache? ? 寫入?

加密

entry.writeto進(jìn)行緩存

判斷是不是https

?緩存

判斷是否為GET 如果是則緩存,POST不用緩存

Cache的get方法

解密


網(wǎng)絡(luò)連接攔截器(ConnectInterceptor)

ConnectInterceptor獲取Interceptor傳過來的StreamAllocation兄墅,streamAllocation.newStream()

將剛才創(chuàng)建的用于網(wǎng)絡(luò)IO的RealConnection對象踢星,以及對于與服務(wù)器交互最為關(guān)鍵的HttpCodec等對象傳遞給后面的攔截器。

newStream方法

1.弄一個RealConnectior對象

2.選擇不同的鏈接方式

3.CallServerIntercentor


連接池的put隙咸,get方法

ConnectionPool時間范圍內(nèi)復(fù)用Connection沐悦,對他有效的進(jìn)行清理回收工作

get由for循環(huán)遍歷連接池的connection,獲取一個可用的connection五督,判斷這個連接是否可供我們使用藏否,可以的時候調(diào)用acquire獲取我們的連接池。

put做一個異步的清理任務(wù)

1.產(chǎn)生一個StreamAllocation對象

2.StreamAllocation對象的弱應(yīng)用添加到RealConnection對象的allocations集合中

3.從鏈接池中獲取

如何實(shí)現(xiàn)自動回收

1.GC

使用了GC回收算法


2.StreamAllocation的數(shù)量

StreamAllocation的數(shù)量會漸漸變成0

3.cleanUpRunnable

被線程池檢測到并回收充包,這樣就可以保持多個健康的keep-alive連接副签。


CallServerInter攔截器

1.,向服務(wù)器發(fā)送網(wǎng)絡(luò)請求

2.接收服務(wù)器給我們的響應(yīng)

HttpCodes 編碼request? 解碼respone

網(wǎng)絡(luò)請求網(wǎng)絡(luò)的大致過程

1.Call對象對請求的封裝

2.dispatcher對請求的分發(fā)

3.getResponseWhithInterceptors()方法

RetryAndFollowUpInterceptor(重定向攔截器)

CacheInterceptor(緩存攔截器)

BridgeInterceptor(轉(zhuǎn)換攔截器)

ConnectionInterceptor(建立連接)

CallServerInterceptor(網(wǎng)絡(luò)請求)


OkHttp面試相關(guān)

1.Android基礎(chǔ)的網(wǎng)絡(luò)編程:socket基矮,HttpClient和HttpURLConnection淆储;

socket


1)socket是什么?

是一個對TCP/IP協(xié)議進(jìn)行封裝的編程調(diào)用接口家浇。

成對出現(xiàn)本砰,一對套接字:包括ip地址和Tcp協(xié)議。

socket就是基于我們應(yīng)用層和傳輸層之間抽象出來的一個層钢悲。通過它來發(fā)送接收數(shù)據(jù)点额,使用socket可以將應(yīng)用程序添加到網(wǎng)絡(luò)中。


2)Socket通信模型莺琳?


基于TCP協(xié)議

采用字節(jié)流的形式來提供我們可靠的 字節(jié)流服務(wù)

基于UDP協(xié)議

采用數(shù)據(jù)保密的形式还棱,提供我們數(shù)據(jù)的打包發(fā)送的數(shù)據(jù)

3)Socket與Http對比?

Android通信有兩種惭等?

Http通信

Socket通信

區(qū)別:

Http:采用請求-響應(yīng)方式珍手。HTTP協(xié)議屬于應(yīng)用層。?

Socket:采用服務(wù)器主動發(fā)送數(shù)據(jù)的方式咕缎,Socket屬于傳輸層珠十。

4)Socket如何實(shí)現(xiàn)?

TCP客戶端:

TCP服務(wù)端:


HttpClient:


HttpURLConnection:



2.了解websocket嗎凭豪?知道和socket的區(qū)別嗎?okhttp是如何處理websocket的相關(guān)問題的晒杈?

推送技術(shù):輪詢

輪詢是在特定的時間間隔嫂伞,由瀏覽器對服務(wù)器發(fā)出的HTTP請求,然后由服務(wù)器返回最新的數(shù)據(jù)給客戶端的瀏覽器。

短輪詢


缺點(diǎn):在某個時間段server沒有更新數(shù)據(jù)帖努,但client仍然每隔一段時間發(fā)送請求來詢問撰豺,所以這段時間內(nèi)的詢問都是無效的。

長輪詢


輪詢?nèi)秉c(diǎn):浪費(fèi)帶寬(HTTP HEAD是比較大的)

消耗服務(wù)器CPU占用

WebSocket如何交互



WebSocket與HTTP同等的網(wǎng)絡(luò)協(xié)議

雙向通信協(xié)議

WebSocket與Socket

Socket其實(shí)并不是一個協(xié)議

WebSocket是一種協(xié)議

他倆沒關(guān)系


WebSocket

1.本質(zhì)上是一個基于TCP的協(xié)議

2.向服務(wù)器發(fā)起一個HTTP請求/“Upgrade:WebSocket”

3.服務(wù)器端解析這些附加的頭信息


3.Http如何處理緩存拼余?OkHttp如何處理緩存相關(guān)的問題污桦?

Http緩存:強(qiáng)制緩存:

Expires:值為服務(wù)端返回的到期時間,

問題:到期時間是由服務(wù)端生成的

Cache-Control:是由服務(wù)器返回的Response中添加的頭信息匙监。

private凡橱,public,max-age亭姥,no-cache稼钩,no-store????

對比緩存:

首先需要進(jìn)行比較判斷是否可以使用緩存

服務(wù)器會將緩存標(biāo)識與數(shù)據(jù)一起返回給客戶端


Etag:服務(wù)器響應(yīng)請求時,告訴瀏覽器當(dāng)前資源在服務(wù)器唯一的標(biāo)識达罗。

If-None-Match:再次請求服務(wù)器時坝撑,通過此字段通知服務(wù)器客戶端緩存數(shù)據(jù)的唯一標(biāo)識

Last-Modified:服務(wù)器在響應(yīng)請求時,告訴瀏覽器資源的最后修改時間

If-Modified-Since:再次請求服務(wù)器時粮揉,通過此字段通知服務(wù)器上次請求時巡李,服務(wù)器返回的資源最后修改時間


4.斷點(diǎn)續(xù)傳的原理?如何實(shí)現(xiàn)扶认?OkHttp中如何實(shí)現(xiàn)相關(guān)的問題侨拦?

斷點(diǎn)續(xù)傳:從文件已經(jīng)下載的地方繼續(xù)開始下載

HttpURLConnection斷點(diǎn)續(xù)傳

OkHttp斷點(diǎn)續(xù)傳


5.多線程下載原理okhttp如何實(shí)現(xiàn)?

多線程下載:每個線程只負(fù)責(zé)下載文件的一部分

HttpURLConnection多線程下載


6.文件上傳如何做蝠引?原理阳谍?okhttp如何完成文件上傳?

Http之contentType

Content-Type屬性指定請求和響應(yīng)的HTTP內(nèi)容類型螃概。


7.json數(shù)據(jù)如何去解析矫夯?Okhttp如何去解析json數(shù)據(jù)?

8.okhttp如何處理https吊洼?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末训貌,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子冒窍,更是在濱河造成了極大的恐慌递沪,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件综液,死亡現(xiàn)場離奇詭異款慨,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)谬莹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門檩奠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來桩了,“玉大人,你說我怎么就攤上這事埠戳【” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵整胃,是天一觀的道長颗圣。 經(jīng)常有香客問我,道長屁使,這世上最難降的妖魔是什么在岂? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮屋灌,結(jié)果婚禮上洁段,老公的妹妹穿的比我還像新娘。我一直安慰自己共郭,他們只是感情好祠丝,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著除嘹,像睡著了一般写半。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上尉咕,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天叠蝇,我揣著相機(jī)與錄音,去河邊找鬼年缎。 笑死悔捶,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的单芜。 我是一名探鬼主播蜕该,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼洲鸠!你這毒婦竟也來了堂淡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤扒腕,失蹤者是張志新(化名)和其女友劉穎绢淀,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瘾腰,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡皆的,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蹋盆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片祭务。...
    茶點(diǎn)故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡内狗,死狀恐怖怪嫌,靈堂內(nèi)的尸體忽然破棺而出义锥,到底是詐尸還是另有隱情,我是刑警寧澤岩灭,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布拌倍,位于F島的核電站,受9級特大地震影響噪径,放射性物質(zhì)發(fā)生泄漏柱恤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一找爱、第九天 我趴在偏房一處隱蔽的房頂上張望梗顺。 院中可真熱鬧,春花似錦车摄、人聲如沸寺谤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽变屁。三九已至,卻和暖如春意狠,著一層夾襖步出監(jiān)牢的瞬間粟关,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工环戈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留闷板,地道東北人。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓院塞,卻偏偏與公主長得像遮晚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子迫悠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評論 2 355

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

  • 這篇文章主要講 Android 網(wǎng)絡(luò)請求時所使用到的各個請求庫的關(guān)系鹏漆,以及 OkHttp3 的介紹。(如理解有誤创泄,...
    小莊bb閱讀 1,159評論 0 4
  • 關(guān)于okhttp是一款優(yōu)秀的網(wǎng)絡(luò)請求框架艺玲,關(guān)于它的源碼分析文章有很多,這里分享我在學(xué)習(xí)過程中讀到的感覺比較好的文章...
    蕉下孤客閱讀 3,602評論 2 38
  • 2.okhttp3.0整體流程:1).創(chuàng)建okhttpclient客戶端對象鞠抑,表示所有的http請求的客戶端的類饭聚,...
    無為3閱讀 379評論 0 1
  • 前言 用OkHttp很久了,也看了很多人寫的源碼分析搁拙,在這里結(jié)合自己的感悟秒梳,記錄一下對OkHttp源碼理解的幾點(diǎn)心...
    Java小鋪閱讀 1,518評論 0 13
  • 冬至節(jié)來不遠(yuǎn)春法绵, 一年萬象始更新。 青絲霜染蒼華嘆酪碘, 未老天光漸老人朋譬。
    山園疏影閱讀 928評論 15 23