Android 常用的网络框架
一、Android 常用的網(wǎng)絡(luò)框架
本文轉(zhuǎn)載自兩點(diǎn)水的博客
大多數(shù)應(yīng)用程序基本都需要連接網(wǎng)絡(luò),發(fā)送一些數(shù)據(jù)給服務(wù)端,或者從服務(wù)端獲取一些數(shù)據(jù)。通常在 Android 中進(jìn)行網(wǎng)絡(luò)連接一般使用 Scoket 和HTTP,HTTP 請求方式比 Scoket 多得多。HTTP 請求一般采用原生的 HttpClient 和 HttpUrlConnection 的兩種網(wǎng)絡(luò)訪問方式。可是在 android 5.0 的時(shí)候 Google 就不推薦使用 HttpClient 了,到了 Android 6.0 (api 23) SDK,不再提供 org.apache.http.* (只保留幾個類), 因此,設(shè)置 android SDK 的編譯版本為23時(shí),且使用了 httpClient 相關(guān)類的庫項(xiàng)目:如 android-async-http 等等,會出現(xiàn)有一些類找不到的錯誤。
列舉目前常用的網(wǎng)絡(luò)框架,當(dāng)然呢,每種網(wǎng)絡(luò)框架都會有其優(yōu)點(diǎn)和缺點(diǎn)的,主要是根據(jù)我們自身的項(xiàng)目進(jìn)行選擇:
1.volley
Volley 的中文翻譯為“齊射、并發(fā)”,是在 2013 年的 Google 大會上發(fā)布的一款 Android 平臺網(wǎng)絡(luò)通信庫,具有網(wǎng)絡(luò)請求的處理、小圖片的異步加載和緩存等功能,能夠幫助 Android APP 更方便地執(zhí)行網(wǎng)絡(luò)操作,而且更快速高效。
在 Google IO 的演講上,其配圖是一幅發(fā)射火弓箭的圖,有點(diǎn)類似流星。這表示,Volley 特別適合數(shù)據(jù)量不大但是通信頻繁的場景。見下圖:
優(yōu)點(diǎn):
(1)自動調(diào)度網(wǎng)絡(luò)請求;
(2)高并發(fā)網(wǎng)絡(luò)連接;
(3)通過標(biāo)準(zhǔn)的 HTTP cache coherence(高速緩存一致性)緩存磁盤和內(nèi)存透明的響應(yīng);
(4)支持指定請求的優(yōu)先級( 請求隊(duì)列的優(yōu)先級排序);
(5) 提供多樣的取消機(jī)制:網(wǎng)絡(luò)請求 cancel 機(jī)制,我們可以取消單個請求,或者指定取消請求隊(duì)列中的一個區(qū)域;
(6)框架容易被定制,例如,定制重試或者回退功能;
(7)包含了調(diào)試與追蹤工具;
(8)默認(rèn) Android2.3 及以上基于 HttpURLConnection,2.3 以下使用基于 HttpClient
(9)提供簡便的圖片加載工具(其實(shí)圖片的加載才是我們最為看重的功能)
缺點(diǎn):
(1)不能下載文件:這也是它最致命的地方
官網(wǎng)或相關(guān)地址:
Volley 的 github 地址:https://github.com/mcxiaoke/android-volley;
Google I/O 2013 – Volley: Easy, Fast Networking for Android:https://www.youtube.com/watch?v=yhv8l9F44qo&feature=player_embedded
簡單的使用:http://www.dengzhr.com/others/mobile/android/762
2.Android-async-http
Android-async-http 是一個強(qiáng)大的網(wǎng)絡(luò)請求庫,這個網(wǎng)絡(luò)請求庫是基于 Apache HttpClient 庫之上的一個異步網(wǎng)絡(luò)請求處理庫,網(wǎng)絡(luò)處理均基于 Android 的非 UI 線程,通過回調(diào)方法處理請求結(jié)果。
android-async-http 是一個強(qiáng)大的第三方開源網(wǎng)絡(luò)請求庫。可惜的是 Android 6.0 (api 23) SDK,不再提供 org.apache.http.* (只保留幾個類)。
優(yōu)點(diǎn):
(1) 在匿名回調(diào)中處理請求結(jié)果
(2) 在 UI 線程外進(jìn)行 http 請求
(3) 文件斷點(diǎn)上傳
(4) 智能重試
(5) 默認(rèn) gzip 壓縮
(6) 支持解析成 Json 格式
(7) 可將 Cookies 持久化到 SharedPreference
官網(wǎng)或相關(guān)地址:
Android-async-http 的 github 地址:https://github.com/loopj/android-async-http
官網(wǎng)教程:http://loopj.com/android-async-http/
接下來我們來看下我們國人封裝的兩個框架 Afinal 框架和 xUtils ,這兩個框架的功能非常的豐富,甚至提供了數(shù)據(jù)庫的封裝,這很符合我們國人開發(fā)的App,都是把一大堆的功能都集進(jìn)去,那這么強(qiáng)大的網(wǎng)絡(luò)框架是不是真的那么強(qiáng)大呢?通常我們都會這樣想:功能越豐富的開源框架,那么它在單一的功能上,比如就網(wǎng)絡(luò)框架這一部分,是不是就沒有其他專一網(wǎng)絡(luò)的框架好呢?
注:這個框架的作者已經(jīng)停止更新了,因此現(xiàn)在就不推薦使用了
3.Afinal框架
Afinal 是一個 android 的 sqlite orm 和 ioc 框架。同時(shí)封裝了android中的http框架,使其更加簡單易用;使用 finalBitmap,無需考慮 bitmap 在 android 中加載的時(shí)候 oom 的問題和快速滑動的時(shí)候圖片加載位置錯位等問題。
Afinal的宗旨是簡潔,快速。約定大于配置的方式。盡量一行代碼完成所有事情。
Afinal主要是分四個模塊:
(1) 數(shù)據(jù)庫模塊:android 中的 orm 框架,使用了線程池對 sqlite 進(jìn)行操作。
(2) 注解模塊:android 中的 ioc 框架,完全注解方式就可以進(jìn)行UI綁定和事件綁定。無需 findViewById 和 setClickListener 等。其實(shí)它后面是使用反射來進(jìn)行初始化的。
(3) 網(wǎng)絡(luò)模塊:通過 httpclient 進(jìn)行封裝 http 數(shù)據(jù)請求,支持 ajax方式加載,支持下載、上傳文件功能。
(4) 圖片緩存模塊:通過 FinalBitmap,imageview 加載 bitmap 的時(shí)候無需考慮 bitmap 加載過程中出現(xiàn)的 oom 和 android 容器快速滑動時(shí)候出現(xiàn)的圖片錯位等現(xiàn)象。
官網(wǎng)或相關(guān)地址:
Afinal框架 的 github 地址:https://github.com/yangfuhai/afinal
注:這個框架的作者已經(jīng)停止更新了,因此現(xiàn)在就不推薦使用了
4.xUtils
xUtils跟Afinal是同類型的框架, 現(xiàn)在作者已經(jīng)兩三年前就沒有進(jìn)行更新了。
官網(wǎng)的簡介:
xUtils3 api 變化較多, 已轉(zhuǎn)至 https://github.com/wyouflf/xUtils3
xUtils 2.x 對 Android 6.0兼容不是很好, 請盡快升級至 xUtils3.
xUtils 包含了很多實(shí)用的android工具。
xUtils 支持大文件上傳,更全面的http請求協(xié)議支持(10種謂詞),擁有更加靈活的 ORM,更多的事件注解支持且不受混淆影響…
xUitls 最低兼容android 2.2 (api level 8)
官網(wǎng)或相關(guān)地址:
Afinal框架 的 github 地址:https://github.com/wyouflf/xUtils
注:這個框架的作者已經(jīng)停止更新了,因此現(xiàn)在就不推薦使用了
上面網(wǎng)絡(luò)框架其實(shí)就個人而已,就不推薦使用了,要不就是功能太過豐富,如果在主流的 app 中使用,對后期的維護(hù), 代價(jià)就很大了。比如你發(fā)現(xiàn)你框架中不適合使用某個功能,需要替換這部分的框架,你就會發(fā)現(xiàn),你整個項(xiàng)目都不出現(xiàn)這個框架的影子,對于后期維護(hù)的成本實(shí)在是太大了!
后面的幾個網(wǎng)路框架(okhttp , retrofit)是目前較好的網(wǎng)絡(luò)框架,在公司也發(fā)現(xiàn),很多項(xiàng)目都是使用這幾個網(wǎng)絡(luò)框架的。這兩個網(wǎng)絡(luò)開源框架都是 square 公司提供的,在開源界中,有兩家公司提供的網(wǎng)絡(luò)框架是非常豐富的,一個是 square 和 Facebook ,真心感謝這兩個公司。
5.OKHttp
OkHttp 是一個相對成熟的解決方案,據(jù)說 Android4.4 的源碼中可以看到 HttpURLConnection 已經(jīng)替換成 OkHttp 實(shí)現(xiàn)了。在 Android 6.0 中底層的源碼已經(jīng)使用了 OKHttp ,這個是可以確定的。
OkHttp 處理了很多網(wǎng)絡(luò)疑難雜癥:會從很多常用的連接問題中自動恢復(fù)。如果您的服務(wù)器配置了多個IP地址,當(dāng)?shù)谝粋€ IP 連接失敗的時(shí)候,OkHttp 會自動嘗試下一個 IP。OkHttp 還處理了代理服務(wù)器問題和 SSL握手失敗問題。
使用 OkHttp 無需重寫您程序中的網(wǎng)絡(luò)代碼。OkHttp 實(shí)現(xiàn)了幾乎和Java.NET.HttpURLConnection 一樣的API。如果你用了 Apache HttpClient,則 OkHttp 也提供了一個對應(yīng)的 okhttp-apache 模塊。
官網(wǎng)或相關(guān)地址:
OKHttp 的 github 地址:https://github.com/square/okhttp
5.retrofit
其實(shí) retrofit 是根據(jù) OKHttp 封裝的框架,它的底層網(wǎng)絡(luò)請求就是使用OKHttp的,這個框架的作者也是非常有名的,就是 Jake Wharton 。簡直就是我的偶像啊!
優(yōu)點(diǎn):
(1)支持 okhttp
(2)注解處理,簡化代碼
(3)支持上傳和下載文件
(4)支持自己更換解析方式
(5)支持多種http請求庫
官網(wǎng)或相關(guān)地址:
OKHttp 的 github 地址:https://github.com/square/retrofit
二、選擇開源框架的見解
1.學(xué)習(xí)的成本:對該框架學(xué)習(xí)的時(shí)間長短,文檔是否齊全的考慮
2.流行的程度:該開源框架是否流行,github 上 start 的個數(shù),都是我們考量的標(biāo)準(zhǔn)
3.是否還在維護(hù):如果該框架沒人維護(hù)了,隨著技術(shù)的不斷更新,都會出現(xiàn)大大小小的問題的
4.代碼的體積: 體積當(dāng)然不能太大了
5.代碼的設(shè)計(jì): 整體框架的設(shè)計(jì)
轉(zhuǎn)載自:http://www.jianshu.com/users/8ec863a03f4f/latest_articles
總結(jié)
以上是生活随笔為你收集整理的Android 常用的网络框架的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面试囧事
- 下一篇: DEA实用插件之Key Permoter