所以總體得出結(jié)論:Square > loopj > wyouflf
3. README.md
以上只是分析了最基本的一些外在因素,但是我們還是要看具體的關(guān)于項(xiàng)目的文檔說(shuō)明,功能介紹也好還是使用方法也好,這些都在 README.md上有所介紹的。
看了這四個(gè)項(xiàng)目的文檔說(shuō)明與介紹,都還算是蠻完整的,也比較詳細(xì)。我們初步了解到各個(gè)庫(kù)的基本功能:
Retrofit、OkHttp都是針對(duì)Java和Android的http網(wǎng)絡(luò)庫(kù);
android-async-http是專(zhuān)門(mén)針對(duì)Android平臺(tái)的http網(wǎng)絡(luò)庫(kù);
xUtils是針對(duì)Android平臺(tái)的一套完整的框架,他包括orm、bitmap、http、view inject好幾個(gè)功能;
至此對(duì)于我個(gè)人來(lái)說(shuō)我基本淘汰了 xUtils 框架,并不是說(shuō)他不好,因?yàn)榈竭@一步我還沒(méi)有詳細(xì)了解各個(gè)庫(kù)的好壞,我是不喜歡用這種「大而全」的框架,一是個(gè)人習(xí)慣,二是覺(jué)得風(fēng)險(xiǎn)較大,因?yàn)橐坏┢渲心骋还δ艹鰡?wèn)題你解決起來(lái)都比較麻煩,如果要因?yàn)檫@個(gè)問(wèn)題替換掉的話(huà)那更麻煩,除非我能確定這套框架非常成熟好用,否則我更寧愿選擇「專(zhuān)注」的框架,而我們一開(kāi)始就提到我們需要的是http網(wǎng)絡(luò)請(qǐng)求庫(kù),所以xUtils被我淘汰了。
剩下三個(gè)網(wǎng)絡(luò)庫(kù),前面我們也說(shuō)到 android-asyn-http 是專(zhuān)門(mén)針對(duì)Android平臺(tái)推出的http網(wǎng)絡(luò)庫(kù),而Square公司的兩個(gè)庫(kù)比較廣泛,不僅Android,還適用于Java平臺(tái),其實(shí)按照我的個(gè)性(好吧,我比較喜歡走心),至此我基本就會(huì)選擇 android-async-http 了,因?yàn)槲腋矚g「專(zhuān)注」,事實(shí)上我確實(shí)是這樣的,我最開(kāi)始接觸的網(wǎng)絡(luò)庫(kù)確實(shí)就是 android-async-http ,確實(shí)也蠻好用的。但是在目前我卻不會(huì)選擇它了。
4. 最后更新時(shí)間、Issues、Fork等
為什么現(xiàn)在不會(huì)選擇 android-async-http 了呢?原因就是這個(gè)庫(kù)作者最后 release 的時(shí)間是15年的9月19號(hào),也就是說(shuō)作者已經(jīng)長(zhǎng)達(dá)7、8個(gè)月沒(méi)更新了,對(duì)于一個(gè)開(kāi)源項(xiàng)目來(lái)說(shuō)最怕的是作者不維護(hù)了,這就意味著之后再也不會(huì)有改進(jìn)了,而且出了什么問(wèn)題也很難被迅速解決。
回頭看下xUtils這個(gè)項(xiàng)目已經(jīng)長(zhǎng)達(dá)2年沒(méi)更新了。
再看下Square公司的 Retrofit 和 OkHttp 項(xiàng)目最近幾天還在更新代碼:

代碼有更新代表作者在一直改進(jìn)該項(xiàng)目,除了最后更新時(shí)間之外,Issues數(shù)量以及作者回復(fù)的速度與比例,F(xiàn)orks 數(shù)量等都是體現(xiàn)該項(xiàng)目被關(guān)注程度以及流行程度,都是很不錯(cuò)的參考指標(biāo)。
5. 開(kāi)源協(xié)議
你們以為開(kāi)源項(xiàng)目是可以隨便使用的么?那就錯(cuò)了,使用開(kāi)源項(xiàng)目也要遵守一定的原則的,即所謂的開(kāi)源協(xié)議,常見(jiàn)的開(kāi)源許可協(xié)議有:
GPL、LGPL、BSD、Apache Licence vesion 2.0、MIT。
這些協(xié)議我就不做過(guò)多解釋?zhuān)薌PL協(xié)議需要注意外,GPL 協(xié)議規(guī)定使用了該開(kāi)源庫(kù)的代碼也必須遵循 GPL 協(xié)議,也就是說(shuō)也得開(kāi)源,不適應(yīng)于商業(yè)項(xiàng)目。其他協(xié)議多少也都會(huì)有些條件限制,但是影響不大,大家自行搜索了解就可以了。目前為止 MIT 應(yīng)該算是用的最多的開(kāi)源協(xié)議了。
其實(shí)開(kāi)源界還有一個(gè)奇葩的協(xié)議叫「WTF」協(xié)議,協(xié)議名稱(chēng)是:「DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE」,言外之意就是「他媽的想干啥干啥協(xié)議」,是不是碉堡了?如果你們不小心在哪個(gè)開(kāi)源項(xiàng)目有見(jiàn)過(guò)這個(gè)協(xié)議,不要大驚小怪,真有這個(gè)協(xié)議的!
6. 綜合
經(jīng)過(guò)上面的分析,就剩 OkHttp 與 Retrofit 兩個(gè)最優(yōu)選擇了,最后我們來(lái)仔細(xì)看看這兩個(gè)庫(kù)有什么區(qū)別。
通過(guò)文檔我們了解到:
OkHttp 是一個(gè) Java 和 Android 平臺(tái)的 Http 請(qǐng)求庫(kù),非常高效,支持 SPDY、連接池、GZIP 和 HTTP 緩存。默認(rèn)情況下,OKHttp 會(huì)自動(dòng)處理常見(jiàn)的網(wǎng)絡(luò)問(wèn)題,像二次連接、SSL 的握手問(wèn)題。
Retrofit 是一套 RESTful 架構(gòu)的 Android 和 Java 平臺(tái) Http 請(qǐng)求庫(kù)的客戶(hù)端實(shí)現(xiàn),基于注解,提供JSON to POJO(Plain Ordinary Java Object,簡(jiǎn)單Java對(duì)象),POJO to JSON,網(wǎng)絡(luò)請(qǐng)求(POST,GET,PUT,DELETE等)封裝。
但是如果你的應(yīng)用程序中集成了 OkHttp,Retrofit 默認(rèn)會(huì)使用 OkHttp 處理其他網(wǎng)絡(luò)層請(qǐng)求。
所以一句話(huà)如果你想讓你的網(wǎng)絡(luò)請(qǐng)求寫(xiě)的更優(yōu)雅那推薦使用 Retrofit ,尤其是跟 RxJava 結(jié)合起來(lái)更好用,否則直接使用 OkHttp 一樣是可以的。
你要問(wèn)我們項(xiàng)目使用了什么網(wǎng)絡(luò)庫(kù)?我們有好幾個(gè)項(xiàng)目,其實(shí)用的最多的是 Volley,因?yàn)槿绻荊oogle官方推出的項(xiàng)目我們一般都是優(yōu)先使用的,畢竟官方出的總不會(huì)太差吧。