Android 網(wǎng)絡(luò)框架發(fā)展史及對比

主要分析以下幾個框架

  1. HttpClient
  2. HttpURLConnection
  3. Volley
  4. OkHttp
  5. Retrofit

網(wǎng)絡(luò)框架分類

底層網(wǎng)絡(luò)框架

HttpClient, HttpURLConnection屁商,OkHttp 屬于底層的網(wǎng)絡(luò)框架奈懒,這些框架是底層真正發(fā)起http請求的船殉。

封裝的網(wǎng)絡(luò)框架

Volley, retrofit屬于對底層網(wǎng)絡(luò)框架的封裝斟叼,比如Volley內(nèi)部使用的就是HttpURLConnection和HttpClient秤朗, retrofit是基于OkHttp 的封裝

大而全的框架

Afinal和xUtils等大而全的框架土陪,包括網(wǎng)絡(luò)框架昼汗,數(shù)據(jù)庫,圖片加載等鬼雀,不建議使用這類的框架顷窒,不好維護,并且這種框架在每個模塊都做的不精源哩。

HttpClient

介紹

HttpClient是Apache公司提供的原始的http協(xié)議庫鞋吉,在2.2之前,官方推薦使用HttpClient.

官方博客:
Android’s HTTP Clients
https://android-developers.googleblog.com/2011/09/androids-http-clients.html
(后面牽涉到HttpClient和HttpURLConnection的一部分分析的內(nèi)容來自這篇文章)

優(yōu)點

功能豐富励烦,非常穩(wěn)定谓着,bug極少

官方博客截圖.png
缺點

數(shù)量眾多的API使得在保證兼容的情況下很難改進,這也是Google官方放棄HttpClient的主要原因

官方博客截圖.png
發(fā)展

2.2之前HttpClient是最佳選擇坛掠,2.3之后赊锚, Google官方建議使用HttpURLConnection. Android6.0以后Google官方Api移除HttpClient

httpclient Android6.0問題及解決

問題:Android6.0以后Google官方Api移除HttpClient,繼續(xù)使用HttpClient及基于其封裝的網(wǎng)絡(luò)庫會出異常
解決:在 build.gradle 文件中聲明以下編譯時依賴項:
android {
useLibrary ‘org.apache.http.legacy’
}

參考:官方介紹
Android 6.0 變更
https://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-apache-http-client

HttpURLConnection

介紹

HttpURLConnection是Sun公司提供的原始的http協(xié)議庫却音,也是Java的標(biāo)準(zhǔn)類庫java.net中的一員

優(yōu)點

HttpURLConnection 是通用的輕量級的 HTTP 客戶端工具改抡,適用于大部分應(yīng)用程序。
增加了壓縮(2.3)和緩存(4.0)系瓢,減少了網(wǎng)絡(luò)使用阿纤,提高了速度,節(jié)省了電量
因為API較少夷陋,所以可以在保證兼容性的前提下做改進欠拾,這也是官方選擇HttpURLConnection取代HttpClient的主要原因

官方博客截圖.png
2.2之前存在的問題及解決

在 Android 2.2 之前的版本中胰锌,存在一些 bug;尤其是在可讀的輸入流中調(diào)用 close()藐窄,會污染連接池
解決:關(guān)閉連接池以保證正常使用

官方博客截圖.png

HttpClient 與HttpURLConnection资昧, Which client is best?

官方博客截圖.png

總結(jié):2.2之前HttpClient是最佳選擇,2.3之后荆忍,建議使用HttpURLConnection

Volley

介紹

2013年Google I/O大會上推出的網(wǎng)絡(luò)框架
Volley is an HTTP library that makes networking for Android apps easier and most importantly, faster. (不僅容易格带,而且更重要的是,更快)

https://developer.android.com/training/volley/index.html

優(yōu)點

(來自官方介紹)

  • Automatic scheduling of network requests.(自動調(diào)度網(wǎng)絡(luò)請求)
  • Multiple concurrent network connections.(多個并發(fā)網(wǎng)絡(luò)連接)
  • Transparent disk and memory response caching with standard HTTP cache coherence.(透明的磁盤和內(nèi)存響應(yīng)緩存刹枉,并且具有標(biāo)準(zhǔn)的HTTP 緩存一致性)
  • Support for request prioritization.(支持請求優(yōu)先級)
  • Cancellation request API. You can cancel a single request, or you can set blocks or scopes of requests to cancel.(具備cancle請求的API,你可以cancel 一個請求叽唱,也可以設(shè)置cancle 的塊和范圍)
  • Ease of customization, for example, for retry and backoff.(可以輕松的定制,比如微宝,重試機制和回退機制)
  • Strong ordering that makes it easy to correctly populate your UI with data fetched asynchronously from the network.(嚴(yán)格的有序化使得你可以容易的用網(wǎng)絡(luò)異步請求獲得的數(shù)據(jù)來正確的填充你的UI)
  • Debugging and tracing tools.(調(diào)試和跟蹤工具)
適合

數(shù)據(jù)量不大棺亭,但通信頻繁的網(wǎng)絡(luò)操作,應(yīng)用中一般的網(wǎng)絡(luò)請求都屬于這種

不適合

Volley is not suitable for large download or streaming operations, since Volley holds all responses in memory during parsing.
不適合大的下載或者流式傳輸操作蟋软,因為Volley在解析過程中將所有響應(yīng)都存儲在內(nèi)存中镶摘。

Volley集成HttpClient和HttpURLConnection

在Android 2.3及以上的版本,使用的是HttpURLConnection岳守,而在Android 2.2及以下版本凄敢,使用的是HttpClient
HurlStack和HttpClientStack分別對應(yīng)HttpURLConnection 和HttpClient 。其實這兩個對象都是實現(xiàn)了HttpStack接口的

Volley集成OkHttp

同上湿痢,我們可以實現(xiàn)一個集成了OkHttp的HurlStack的實現(xiàn)
OkHttp作者Jake Wharton的Gist:
https://gist.github.com/JakeWharton/5616899

okhttp

介紹

okhttp是square公司開發(fā)的網(wǎng)絡(luò)框架贡未。
(后面會有文章詳細分析)

google官方使用

Android 4.4后,HttpURLConnection底層實現(xiàn)使用的就是OkHttp

優(yōu)點

(來自官方介紹)

  • HTTP/2 support allows all requests to the same host to share a socket.(對同一個主機發(fā)出的所有請求都可以共享相同的套接字連接)
  • Connection pooling reduces request latency (if HTTP/2 isn’t available).(使用連接池來復(fù)用連接以提高效率)
  • Transparent GZIP shrinks download sizes.(提供了對 GZIP 的默認支持來降低傳輸內(nèi)容的大忻膳邸)
  • Response caching avoids the network completely for repeat requests.(對 HTTP 響應(yīng)的緩存機制,可以避免不必要的網(wǎng)絡(luò)請求)
  • OkHttp perseveres when the network is troublesome: it will silently recover from common connection problems. If your service has multiple IP addresses OkHttp will attempt alternate addresses if the first connect fails. This is necessary for IPv4+IPv6 and for services hosted in redundant data centers(當(dāng)網(wǎng)絡(luò)出現(xiàn)問題時害幅,OkHttp 會自動重試一個主機的多個 IP 地址)
  • It supports both synchronous blocking calls and async calls with callbacks.(支持同步阻塞請求和異步請求兩種方式)
  • OkHttp supports Android 2.3 and above. For Java, the minimum requirement is 1.7.(支持Android2.3+ java 1.7+)

Retrofit

介紹

Retrofit與okhttp一樣出自于Square公司。Retrofit是一個封裝的網(wǎng)絡(luò)框架岂昭,底層網(wǎng)絡(luò)框架使用的是OkHttp(Retrofit 2.0 開始不支持其他底層網(wǎng)絡(luò)框架)以现。
(后面會有文章詳細分析)

優(yōu)點

Retrofit是對http請求的更好的封裝,使用起來更簡單约啊,大大增加了開發(fā)效率邑遏。
其中的很多環(huán)節(jié)你都可以自定義,使用起來更靈活恰矩,比如你可以自定義json解析框架比如Gson记盒,Jackson等。
支持RxJava外傅,這也是很多人選擇它的原因纪吮。

RxJava+Retrofit+OkHttp

這基本上是目前網(wǎng)絡(luò)框架最好的選擇了俩檬。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市碾盟,隨后出現(xiàn)的幾起案子棚辽,更是在濱河造成了極大的恐慌,老刑警劉巖冰肴,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屈藐,死亡現(xiàn)場離奇詭異,居然都是意外死亡熙尉,警方通過查閱死者的電腦和手機联逻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來骡尽,“玉大人遣妥,你說我怎么就攤上這事∨氏福” “怎么了箫踩?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長谭贪。 經(jīng)常有香客問我境钟,道長,這世上最難降的妖魔是什么俭识? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任慨削,我火速辦了婚禮,結(jié)果婚禮上套媚,老公的妹妹穿的比我還像新娘缚态。我一直安慰自己,他們只是感情好堤瘤,可當(dāng)我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布玫芦。 她就那樣靜靜地躺著,像睡著了一般本辐。 火紅的嫁衣襯著肌膚如雪桥帆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天慎皱,我揣著相機與錄音老虫,去河邊找鬼。 笑死茫多,一個胖子當(dāng)著我的面吹牛祈匙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播地梨,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼菊卷,長吁一口氣:“原來是場噩夢啊……” “哼缔恳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起洁闰,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤歉甚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后扑眉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體纸泄,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年腰素,在試婚紗的時候發(fā)現(xiàn)自己被綠了聘裁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡弓千,死狀恐怖衡便,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情洋访,我是刑警寧澤镣陕,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站姻政,受9級特大地震影響呆抑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜汁展,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一鹊碍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧食绿,春花似錦侈咕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至品洛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間摩桶,已是汗流浹背桥状。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留硝清,地道東北人辅斟。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像芦拿,于是被迫代替她去往敵國和親士飒。 傳聞我的和親對象是個殘疾皇子查邢,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,947評論 2 355

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