1. 程式人生 > >Android常用框架----網路請求系列框架

Android常用框架----網路請求系列框架

趁著這段時間不忙,放下工作,靜下心來對Android中常用的第三方框架進行了剖析並整理,接下來從網路請求框架開始。

常用網路請求框架對比:

1.okhttp

okhttp和HttpClient、HttpURLConnection或Apache的HttpClient是同等級別的,他們是網路客戶端,不僅Android能用,Java也能用,所以在android中想要用要進行封裝以提供簡單的API使用。

Square 公司開源的 okHttp 是一個專注於連線效率的 HTTP 客戶端。okHttp 提供了對 HTTP/2 和 SPDY 的支援,並提供了連線池,GZIP 壓縮和 HTTP 響應快取功能。預設情況下,okHttp會自動處理常見的網路問題,像二次連線、SSL的握手問題。從Android4.4開始HttpURLConnection的底層實現採用的是okHttp.

okHttp,okHttpUtils,Retrofit(三者都是基於okhttp實現的,okHttpUtils是鴻洋大神對okhttp的封裝,Retrofit是OkHttp母公司出品的)

優點

支援http請求,https請求。
支援檔案下載。
使用的是HttpURLConnection,不要擔心android版本的變換。(至少目前是都支援的)。
支援get,post請求。
基於Http的檔案上傳。
載入圖片。

缺點

比如callback回來是線上程裡面, 不能重新整理UI,需要我們手動處理。
封裝比較麻煩。

2、Volley

   是Google在2013年Google I/O大會上基於HttpClient + HttpURLConnection來封裝的,針對短、頻、快的網路請求推出的一款新的網路通訊框架,開源的。Volley可是說是把AsyncHttpClient和Universal-Image-Loader的優點集於了一身,既可以像AsyncHttpClient一樣非常簡單地進行HTTP通訊,也可以像Universal-Image-Loader一樣輕鬆載入網路上的圖片。Volley 的特點:特別適合資料量小,通訊頻繁的網路操作。

優點

非常適合進行資料量不大,但通訊頻繁的網路操作。
內部分裝了非同步執行緒。
支援get,post網路請求。
圖片下載。
可直接在主執行緒呼叫服務端並處理返回結果。
可以取消請求,容易擴充套件,面向介面程式設計。

缺點

對大檔案下載 Volley的表現非常糟糕。
只支援http請求。
圖片載入效能一般。
使用的是httpclient,HttpURLConnection。不過在android 6.0不支援httpclient了,如果想支援得新增org.apache.http.legacy.jar。

使用方法:

1. 建立一個RequestQueue物件。
2. 建立一個StringRequest物件。
3. 將StringRequest物件新增到RequestQueue裡面。
RequestQueue mQueue = Volley.newRequestQueue(context);  
StringRequest stringRequest = new StringRequest("http://www.baidu.com",  
                        new Response.Listener<String>() {  
                            @Override  
                            public void onResponse(String response) {  
                                Log.d("TAG", response);  
                            }  
                        }, new Response.ErrorListener() {  
                            @Override  
                            public void onErrorResponse(VolleyError error) {  
                                Log.e("TAG", error.getMessage(), error);  
                            }  
                        }); 
mQueue.add(stringRequest); 

3、NoHttp

是基於HttpURLConnection來封裝的,它的優勢在於封裝的功能強大,效能也可以。簡述如下:

(1)支援HTTP/HTTPS,自動維持Cookie,非同步/同步請求,大檔案/多檔案上傳,檔案下載,斷點續傳。
(2)支援304快取,302/303重定向,支援通過代理伺服器訪問地址。
(3)NoHttp是佇列,自動為請求排隊,可以取消指定請求,可以取消佇列所有請求,亦可以停止佇列。
(4)支援請求String、Bitmap、JsonObject、可自定義擴充套件請求型別(demo中的FastJsonRequest等)
(5)API使用簡單,Request物件包涵引數、檔案、請求頭等;Response物件包涵響應內容, 響應頭等資訊。

總結:

(1)如果你的應用場景是頻繁短暫的網路互動不涉及大檔案的上傳、下載 Volley足可以滿足需求,apk的升級下載要自行封裝一下;
(2)如果你想更省事、更簡單的開發可以使用NoHttp,不過NoHttp是個人開發的,後期的維護升級是有風險的;
(3)如果想要穩定並且高效的一款網路框架,OkHttp是首選,花點時間找一個封裝好的框架或者自己封裝一下想要的功能就可以了。

4、xUtils(跟Afinal是同類型的框架, 現在作者已經兩三年前就沒有進行更新了)

xUtils 包含了很多實用的android工具。xUtils 源於Afinal框架,對Afinal進行了大量重構,使得xUtils支援大檔案上傳,更全面的http請求協議支援,擁有更加靈活的ORM,更多的事件註解支援且不受混淆影響。同時需要注意的是,xUitls最低相容android 2.2 (api level 8)  。
一、ViewUtils
@ViewInject、@OnClick,就能輕鬆擺脫findViewById找控制元件,各種監聽事件的繫結。

二、HttpUtils
支援的HTTP七種請求方式,非常便捷的滿足你的介面請求的需要。同時還支援大檔案上傳下載,以及同步非同步請求。

三、BitmapUtils
擺脫了程式因OOM強制關閉和加在網路圖片的問題。

四、DbUtils
簡單易用又出色的ORM(物件關係對映:Object-Relational Mapping)框架,直接輕鬆儲存各種物件到sqlite資料庫中,同時也能非常方便的進行各種條件查詢,甚至分頁查詢,還有對錶中資料的更新刪除等操作,真正的實現。一行程式碼就可以進行增刪改查。並且可通過註解自定義表名,列名,外來鍵,唯一性約束,NOT NULL約束,CHECK約束等,支援事務。

官網的簡介:
xUtils3 api 變化較多, 已轉至 https://github.com/wyouflf/xUtils3
xUtils 2.x 對 Android 6.0相容不是很好, 請儘快升級至 xUtils3.
xUtils 包含了很多實用的android工具。
xUtils 支援大檔案上傳,更全面的http請求協議支援(10種謂詞),擁有更加靈活的 ORM,更多的事件註解支援且不受混淆影響…
xUitls 最低相容android 2.2 (api level 8)
官網或相關地址:
Afinal框架 的 github 地址:https://github.com/wyouflf/xUtils
注:這個框架的作者已經停止更新了,因此現在就不推薦使用了

5、Afinal框架

Afinal 是一個 android 的 sqlite orm 和 ioc 框架。同時封裝了android中的http框架,使其更加簡單易用;使用 finalBitmap,無需考慮 bitmap 在 android 中載入的時候 oom 的問題和快速滑動的時候圖片載入位置錯位等問題。
Afinal的宗旨是簡潔,快速。約定大於配置的方式。儘量一行程式碼完成所有事情。

Afinal主要是分四個模組: 
(1) 資料庫模組:android 中的 orm 框架,使用了執行緒池對 sqlite 進行操作。 
(2) 註解模組:android 中的 ioc 框架,完全註解方式就可以進行UI繫結和事件繫結。無需 findViewById 和 setClickListener 等。其實它後面是使用反射來進行初始化的。 
(3) 網路模組:通過 httpclient 進行封裝 http 資料請求,支援 ajax方式載入,支援下載、上傳檔案功能。 
(4) 圖片快取模組:通過 FinalBitmap,imageview 載入 bitmap 的時候無需考慮 bitmap 載入過程中出現的 oom 和 android 容器快速滑動時候出現的圖片錯位等現象。

官網或相關地址:
Afinal框架 的 github 地址:https://github.com/yangfuhai/afinal
注:這個框架的作者已經停止更新了,因此現在就不推薦使用了

以上是常用的網路框架,專案中比較熟悉和常使用的框架:基於okHttp封裝庫的okhttputils框架(詳細使用參考網路請求框架(二)—-改善的okHttp封裝庫okhttputils的使用 )和volley框架。