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

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

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

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

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

HttpClient

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

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

HttpURLConnection

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

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

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

Accept-Encoding: gzip

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

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

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

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

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

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

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

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

[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)該同時(shí)配置一下你的Web服務(wù)器,在HTTP響應(yīng)上加入緩存的消息頭。

哪一種才是最好的?

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

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

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

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過(guò)流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問(wèn)題卻十分常見(jiàn),不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問(wèn)題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問(wèn)題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來(lái)解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開(kāi)關(guān)電源具有效率高的特性,而且開(kāi)關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開(kāi)關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉