www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 芯聞號 > 充電吧
[導(dǎo)讀]本文屬于收藏轉(zhuǎn)載,侵刪。最近在研究Volley框架的源碼,發(fā)現(xiàn)它在HTTP請求的使用上比較有意思,在Android 2.3及以上版本,使用的是HttpURLConnection,而在Android 2

本文屬于收藏轉(zhuǎn)載,侵刪。

最近在研究Volley框架的源碼,發(fā)現(xiàn)它在HTTP請求的使用上比較有意思,在Android 2.3及以上版本,使用的是HttpURLConnection,而在Android 2.2及以下版本,使用的是HttpClient。我也比較好奇這么使用的原因,于是專門找到了一位Google的工程師寫的一篇博客,文中對HttpURLConnection和HttpClient進(jìn)行了對比,下面我就給大家簡要地翻譯一下。

大多數(shù)的Android應(yīng)用程序都會使用HTTP協(xié)議來發(fā)送和接收網(wǎng)絡(luò)數(shù)據(jù),而Android中主要提供了兩種方式來進(jìn)行HTTP操作,HttpURLConnection和HttpClient。這兩種方式都支持HTTPS協(xié)議、以流的形式進(jìn)行上傳和下載、配置超時時間、IPv6、以及連接池等功能。

HttpClient

DefaultHttpClient和它的兄弟AndroidHttpClient都是HttpClient具體的實(shí)現(xiàn)類,它們都擁有眾多的API,而且實(shí)現(xiàn)比較穩(wěn)定,bug數(shù)量也很少。

但同時也由于HttpClient的API數(shù)量過多,使得我們很難在不破壞兼容性的情況下對它進(jìn)行升級和擴(kuò)展,所以目前Android團(tuán)隊(duì)在提升和優(yōu)化HttpClient方面的工作態(tài)度并不積極。

HttpURLConnection

HttpURLConnection是一種多用途、輕量極的HTTP客戶端,使用它來進(jìn)行HTTP操作可以適用于大多數(shù)的應(yīng)用程序。雖然HttpURLConnection的API提供的比較簡單,但是同時這也使得我們可以更加容易地去使用和擴(kuò)展它。

不過在Android 2.2版本之前,HttpURLConnection一直存在著一些令人厭煩的bug。比如說對一個可讀的InputStream調(diào)用close()方法時,就有可能會導(dǎo)致連接池失效了。那么我們通常的解決辦法就是直接禁用掉連接池的功能:

[java]?view plain?copy ?private?void?disableConnectionReuseIfNecessary()?{?? ????//?這是一個2.2版本之前的bug?? ????if?(Integer.parseInt(Build.VERSION.SDK)?<?Build.VERSION_CODES.FROYO)?{?? ????????System.setProperty("http.keepAlive",?"false");?? ????}?? }?? 在Android 2.3版本的時候,我們加入了更加透明化的響應(yīng)壓縮。HttpURLConnection會自動在每個發(fā)出的請求中加入如下消息頭,并處理相應(yīng)的返回結(jié)果:

Accept-Encoding: gzip

配置你的Web服務(wù)器來支持對客戶端的響應(yīng)進(jìn)行壓縮的功能,從而可以在這一改進(jìn)上獲取到最大的好處。如果在壓縮響應(yīng)的時候出現(xiàn)了問題,這篇文檔會告訴你如何禁用掉這個功能。

但是如果啟動了響應(yīng)壓縮的功能,HTTP響應(yīng)頭里的Content-Length就會代表著壓縮后的長度,這時再使用getContentLength()方法來取出解壓后的數(shù)據(jù)就是錯誤的了。正確的做法應(yīng)該是一直調(diào)用InputStream.read()方法來讀取響應(yīng)數(shù)據(jù),一直到出現(xiàn)-1為止。

我們在Android 2.3版本中還增加了一些HTTPS方面的改進(jìn),現(xiàn)在HttpsURLConnection會使用SNI(Server Name Indication)的方式進(jìn)行連接,使得多個HTTPS主機(jī)可以共享同一個IP地址。除此之外,還增加了一些壓縮和會話的機(jī)制。如果連接失敗,它會自動去嘗試重新進(jìn)行連接。這使得HttpsURLConnection可以在不破壞老版本兼容性的前提下,更加高效地連接最新的服務(wù)器。

在Android 4.0版本中,我們又添加了一些響應(yīng)的緩存機(jī)制。當(dāng)緩存被安裝后(調(diào)用HttpResponseCache的install()方法),所有的HTTP請求都會滿足以下三種情況:

所有的緩存響應(yīng)都由本地存儲來提供。因?yàn)闆]有必要去發(fā)起任務(wù)的網(wǎng)絡(luò)連接請求,所有的響應(yīng)都可以立刻獲取到。

視情況而定的緩存響應(yīng)必須要有服務(wù)器來進(jìn)行更新檢查。比如說客戶端發(fā)起了一條類似于 “如果/foo.png這張圖片發(fā)生了改變,就將它發(fā)送給我” 這樣的請求,服務(wù)器需要將更新后的數(shù)據(jù)進(jìn)行返回,或者返回一個304 Not Modified狀態(tài)。如果請求的內(nèi)容沒有發(fā)生,客戶端就不會下載任何數(shù)據(jù)。

沒有緩存的響應(yīng)都是由服務(wù)器直接提供的。這部分響應(yīng)會在稍后存儲到響應(yīng)緩存中。

由于這個功能是在4.0之后的版本才有的,通常我們就可以使用反射的方式來啟動響應(yīng)緩存功能。下面的示例代碼展示了如何在Android 4.0及以后的版本中去啟用響應(yīng)緩存的功能,同時還不會影響到之前的版本:

[java]?view plain?copy ?private?void?enableHttpResponseCache()?{?? ????try?{?? ????????long?httpCacheSize?=?10?*?1024?*?1024;?//?10?MiB?? ????????File?httpCacheDir?=?new?File(getCacheDir(),?"http");?? ????????Class.forName("android.net.http.HttpResponseCache")?? ????????????.getMethod("install",?File.class,?long.class)?? ????????????.invoke(null,?httpCacheDir,?httpCacheSize);?? ????}?catch?(Exception?httpResponseCacheNotAvailable)?{?? ????}?? }?? 你也應(yīng)該同時配置一下你的Web服務(wù)器,在HTTP響應(yīng)上加入緩存的消息頭。

哪一種才是最好的?

在Android 2.2版本之前,HttpClient擁有較少的bug,因此使用它是最好的選擇。

而在Android 2.3版本及以后,HttpURLConnection則是最佳的選擇。它的API簡單,體積較小,因而非常適用于Android項(xiàng)目。壓縮和緩存機(jī)制可以有效地減少網(wǎng)絡(luò)訪問的流量,在提升速度和省電方面也起到了較大的作用。對于新的應(yīng)用程序應(yīng)該更加偏向于使用HttpURLConnection,因?yàn)樵谝院蟮墓ぷ鳟?dāng)中我們也會將更多的時間放在優(yōu)化HttpURLConnection上面。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉