1. 程式人生 > >Android4種網路連線方式HttpClient、HttpURLConnection、OKHttp和Volley優缺點和效能對比

Android4種網路連線方式HttpClient、HttpURLConnection、OKHttp和Volley優缺點和效能對比

比較的指標:

1、cpu

2、流量

3、電量

4、記憶體佔用

5、聯網時間

功能點:

1、重試機制

2、提供的擴充套件功能

3、易用性

4、是否https

5、是否支援reflect api,OkHttp有配套方法

6、快取、重試

7、cookie支援session  id會話支援

8、弱網效能和穩定性

9、超時時間,幾種超時時間   連線超時,響應超時 

10、適配各種機型、4.4和之前版本  2.3  4.1 5.0  

4種網路連線方式提供的功能對比表格:

快取

重試

Https/Http

穩定性

Cookie

Session

HttpClient

Ok

自動管理Cookie

HttpURLConnection

POST  ×

GET  √ 4.0以後

Ok

設定請求Cookie

OkHttp

Ok

Volley

Ok

Ps:穩定性:四種網路連線方式都在業內廣泛應用,都比較穩定。

特別指出的是,在 Froyo(2.2)之前,HttpURLConnection有個重大 Bug,呼叫close()函式會影響連線池,導致連線複用失效,所以在 Froyo 之前使用HttpURLConnection需要關閉keepAlive。

另外,在 Gingerbread(2.3) HttpURLConnection 預設開啟了 gzip 壓縮,提高了 HTTPS 的效能,Ice Cream Sandwich(4.0) HttpURLConnection 支援了請求結果快取。

再加上HttpURLConnection本身API相對簡單,所以對Android來說,在2.3之後建議使用HttpURLConnection,之前建議使用HttpClient。

功能對比表格參考的部落格:

HttpClient Cookie:

HttpClient 重試機制:

Volley原始碼解析:

HttpURLConnection設定請求Cookie:

OkHttp Cookie管理:

Volley CookieSession:

HttpClient Session保持:

1、HttpClient  缺點羅列

Apache HttpClient早就不推薦httpclient,5.0之後乾脆廢棄,後續會刪除。6.0刪除了HttpClient。Java開發用HttpClient,官方推薦Android開發用HttpUrlConnection。

DefaultHttpClient和它的兄弟AndroidHttpClient都是HttpClient具體的實現類,它們都擁有眾多的API,而且實現比較穩定,bug數量也很少。

但同時也由於HttpClient的API數量過多,使得我們很難在不破壞相容性的情況下對它進行升級和擴充套件,所以,目前Android團隊在提升和優化HttpClient方面的工作態度並不積極。

高效穩定,但是維護成本高昂,故android 開發團隊不願意在維護該庫而是轉投更為輕便的HttpUrlConnection。

2、HttpURLConnection 

HttpURLConnection是一種多用途、輕量極的HTTP客戶端,使用它來進行HTTP操作可以適用於大多數的應用程式。雖然HttpURLConnection的API提供的比較簡單,但是同時這也使得我們可以更加容易地去使用和擴充套件它。

不過在Android 2.2版本之前,HttpURLConnection一直存在著一些令人厭煩的bug。比如說對一個可讀的InputStream呼叫close()方法時,就有可能會導致連線池失效了。那麼我們通常的解決辦法就是直接禁用掉連線池的功能:

在Android 4.0版本中,我們又添加了一些響應的快取機制。當快取被安裝後(呼叫HttpResponseCache的install()方法),所有的HTTP請求都會滿足以下三種情況:

比較輕便,靈活,易於擴充套件

在3.0後以及4.0中都進行了改善,如對HTTPS的支援

在4.0中,還增加了對快取的支援

在android 2.2及以下版本中HttpUrlConnection存在著一些bug,所以建議在android 2.3以後使用HttpUrlConnection,2.3之前使用HttpClient。

OkHttp是一個現代,快速,高效的Http client,支援HTTP/2以及SPDY(SPDY介紹網址:https://zh.wikipedia.org/wiki/SPDYSPDY(發音如英語:speedy),一種開放網路傳輸協議,由Google開發),它為你做了很多的事情。

OKHttp是Android版Http客戶端。非常高效,支援SPDY、連線池、GZIP和HTTP快取。

支援SPDY,可以合併多個到同一個主機的請求

OkHttp實現的諸多技術如:連線池,gziping,快取等就知道網路相關的操作是多麼複雜了。

OkHttp扮演著傳輸層的角色。

OkHttp使用Okio來大大簡化資料的訪問與儲存,Okio是一個增強 java.io 和 java.nio的庫。

OkHttp 處理了很多網路疑難雜症:會從很多常用的連線問題中自動恢復。如果您的伺服器配置了多個IP地址,當第一個IP連線失敗的時候,OkHttp會自動嘗試下一個IP。

OkHttp還處理了代理伺服器問題和SSL握手失敗問題。

OkHttp是一個Java的HTTP+SPDY客戶端開發包,同時也支援Android。需要Android 2.3以上

OKHttp是Android版Http客戶端。非常高效,支援SPDY、連線池、GZIP和 HTTP 快取。

預設情況下,OKHttp會自動處理常見的網路問題,像二次連線、SSL的握手問題。

如果你的應用程式中集成了OKHttp,Retrofit預設會使用OKHttp處理其他網路層請求。

從Android4.4開始HttpURLConnection的底層實現採用的是okHttp 

    快取響應避免重複的網路請求

目前,該封裝庫志支援:

•     一般的get請求

•     一般的post請求

•     基於Http的檔案上傳

•     檔案下載

•     上傳下載的進度回撥

•     載入圖片

•     支援請求回撥,直接返回物件、物件集合

•     支援session的保持

•     支援自簽名網站https的訪問,提供方法設定下證書就行

•     支援取消某個請求

為什麼要做快取,或者說有什麼好處?

減少伺服器負荷,降低延遲提升使用者體驗。

複雜的快取策略會根據使用者當前的網路情況採取不同的快取策略,比如在2g網路很差的情況下,提高快取使用的時間;不用的應用、業務需求、介面所需要的快取策略也會不一樣,有的要保證資料的實時性,所以不能有快取,有的你可以快取5分鐘,等等。你要根據具體情況所需資料的時效性情況給出不同的方案。當然你也可以全部都一樣的快取策略,看你自己。

4、Volley

Volley是一個簡化網路任務的庫。他負責處理請求,載入,快取,執行緒,同步等問題。它可以處理JSON,圖片,快取,文字源,支援一定程度的自定義。

Volley在Android 2.3及以上版本,使用的是HttpURLConnection,而在Android 2.2及以下版本,使用的是HttpClient。
    Volley的基本用法,網上資料無數,這裡推薦郭霖大神的部落格
    Volley存在一個快取執行緒,一個網路請求執行緒池(預設4個執行緒)。
    Volley這樣直接用開發效率會比較低,我將我使用Volley時的各種技巧封裝成了一個庫RequestVolly.
    我在這個庫中將構造請求的方式封裝為了函式式呼叫。維持一個全域性的請求佇列,拓展一些方便的API。

不過再怎麼封裝Volley在功能拓展性上始終無法與OkHttp相比。
Volley停止了更新,而OkHttp得到了官方的認可,並在不斷優化。因此我最終替換為了OkHttp

OkHttp使用Okio進行資料傳輸。都是Square家的。
但並不是直接用OkHttp。Square公司還出了一個Retrofit庫配合OkHttp戰鬥力翻倍。

網路載入庫:Picasso、Fresco,所以我更喜歡Glide 

不過現在主流的網路請求都是用Volley,OkHttp呼聲也很高。

Volley是為RPC網路操作而設計的,適用於短時操作。

Volley預設在Froyo上使用Apache Http stack作為其傳輸層,在Gingerbread及之後的版本上使用HttpURLConnection stack作為傳輸層。原因是在不同的安卓版本中這兩種http stack各自存在一些問題。

Volley可以輕鬆設定OkHttp作為其傳輸層。

Volley是谷歌開發的。

Volley可以說是把AsyncHttpClient和Universal-Image-Loader的優點集於了一身,既可以像AsyncHttpClient一樣非常簡單地進行HTTP通訊,也可以像Universal-Image-Loader一樣輕鬆載入網路上的圖片。除了簡單易用之外,Volley在效能方面也進行了大幅度的調整,它的設計目標就是非常適合去進行資料量不大,但通訊頻繁的網路操作,而對於大資料量的網路操作,比如說下載檔案等,Volley的表現就會非常糟糕
    Volley提供了:JsonObjectRequest、JsonArrayRequest、StringRequest、ImageRequest、NetworkImageView等Request形式。

Volley的優點很多,可拓展、結構合理、邏輯清晰、能識別快取、通過統一的方式,獲取網路資料,包括且不限於文字、圖片等資源。用了一段時間,果斷放棄以前用過的其他框架。

Volley在一開始建立請求佇列的過程中,需要建立網路執行緒和快取執行緒,同時還需要初始化基於Disk的快取,這中間有大量的資源開銷和IO操作,所有才會慢。

4種方式的比較:

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

2、HttpURlConnection: 而在Android 2.3版本及以後,HttpURLConnection則是最佳的選擇。它的API簡單,體積較小,因而非常適用於Android專案。

對於新的應用程式應該更加偏向於使用HttpURLConnection因為在以後的工作當中我們也會將更多的時間放在優化HttpURLConnection上面。

谷歌自己也是推薦用HttpUrlConnection,對它進行了大量的優化,這個從安卓的幫助文件可以看出來:

3OkHttp:是一個相對成熟的解決方案,我們更有理由相信OkHttp的強大。

Android4.4的原始碼中可以看到HttpURLConnection已經替換成OkHttp實現了。

OkHttp 處理了很多網路疑難雜症:會從很多常用的連線問題中自動恢復。

如果您的伺服器配置了多個IP地址,當第一個IP連線失敗的時候,OkHttp會自動嘗試下一個IP。

OkHttp還處理了代理伺服器問題和SSL握手失敗問題。

使用 OkHttp 無需重寫您程式中的網路程式碼。

OkHttp實現了幾乎和java.net.HttpURLConnection一樣的API。

其實現在嘛,兩者都不用,就用Okhttp
HttpUrlConnection
現在的底層實現就是通過Okhttp

網路請求框架支援的功能:

1、支援自定義請求的Header

2、支援Http的基本請求方法:GET、POST

3、支援檔案上傳和下載

4、可以載入圖片

5、支援多工網路請求操做

6、支援快取

7、支援請求回撥

8、支援session的保持

網路優化建議點:

1、連線複用節省連線建立時間,如開啟keep-alive 

2、不用域名,用IP直連省去DNS解析過程,根據域名得到IP地址

參考部落格:

一、效能指標對比

測試手機:小米MI3(4.4.4)、魅藍2(5.1)

測試版本:書旗Android 9.9.0

測試環境:直連下wifi訪問

測試方法:安裝並開啟易測APP,安裝網路框架apk,進行聯網請求(http://www.csdn.net/),請求多次進行測試。

測試結果計算:測試3次。

誤差說明:第三方軟體計算,受後臺應用影響,存在一定誤差。

1、CPU佔用

誤差說明:第三方軟體計算,受後臺應用影響,存在一定誤差。



   結論:測試機型總體上CPU佔用率,OkHttp的網路請求略低於其它聯網方式。

2、記憶體消耗

誤差說明:第三方軟體計算,受後臺應用影響,存在一定誤差。



結論:測試機型總體上記憶體佔用情況,在小米手機上,OkHttp的網路請求消耗記憶體略低於其它聯網方式。在魅族手機上,記憶體消耗略高於其它方式。顯示出測試機型記憶體消耗表現不一。

3、電量消耗

誤差說明:第三方軟體計算,受後臺應用影響,存在一定誤差。

 


    結論:OkHttp的網路請求消耗的電量百分比在略低於其它聯網方式,消耗的總電量在小米手機上高於其它聯網方式,在魅族手機上略低於其它聯網方式。消耗電量的差異不大,在0.5mah以內。

4、流量消耗

誤差說明:網路請求的傳送和接收流量存在一定誤差。

結論:

1、網路傳送流量HttpURLConnection最高,Volley次之,OKHttp第三位,HttpClient最少。但是,資料量差別不大,零點幾的請求差別。

2、累積接收流量HttpClient最大,HttpURLConnection和Volley相同,OkHttp略大於前兩者。

5、聯網平均耗時

誤差說明:網路的狀況可能會影響網路請求時間。


結論:網路請求平均耗時HttpClient最大,HttpURLConnection最小,Volley平均比前者高10ms~20ms,OkHttp比Volley高20ms~40ms。

綜上得出最終結論:

1、對於新的應用程式,應該更加偏向於使用HttpURLConnection因為在以後的工作當中Google也會將更多的時間放在優化HttpURLConnection上面。

谷歌自己也是推薦用HttpUrlConnection,對它進行了大量的優化,這個從安卓的幫助文件可以看出來:

2、對於已經成熟的應用, Volley停止了更新,而OkHttp得到了官方的認可,並在不斷優化。

因此我建議使用OkHttp,現在最新穩定版為3.2.0 


相關推薦

Android4網路連線方式HttpClientHttpURLConnectionOKHttpVolley優缺點效能對比

比較的指標: 1、cpu 2、流量 3、電量 4、記憶體佔用 5、聯網時間 功能點: 1、重試機制 2、提供的擴充套件功能 3、易用性 4、是否https 5、是否支援reflect api,OkHttp有配套方法 6、快取、重試 7、cookie支援

virtualbox的四網路連線方式的學習

在利用virtualbox建立虛擬機器的時候,會發現在設定網路的時候會有四種網路連線方式,如下圖: a. NAT               &n

linux三網路連線方式的區別

1、橋接:虛擬機器通過本機的真實網絡卡和主機進行通訊。不僅可以和你的本機進行通訊,如果區域網內有同網段的計算機,也可以進行通訊。不過需要佔用同網段的一個ip地址。 2、NAT:虛擬機器通過VMware-8這塊虛擬出來的網絡卡和你的本機進行通訊。 3、host-only:虛擬機器通過VMware-1這

visualBox的四網路連線方式

1.Network Address Translation (網路地址轉換,NAT) guest作業系統啟動時,通常使用DHCP獲取IP地址。VirtualBox將對DHCP請求進行處理,並告知guest作業系統所分配到的IP地址和用於路由出站連線的閘道

編輯虛擬機器設定裡面的三網路連線方式

VMware安裝了centos6.0的一些簡介 一、編輯虛擬機器設定裡面的三種網路連線方式 1、橋接模式: 什麼是橋接模式?橋接模式就是將主機網絡卡與虛擬機器虛擬的網絡卡利用虛擬網橋進行通訊。也就是虛擬機器和主機都可以相互獨立訪問,各自獲取ip地址。(注意是同一網段,下圖為工作模式)

網路知識 虛擬機器 3網路連線方式區別

 VMware網路連線的方式主要有:橋接(Bridged)、NAT、主機網路(Host-Only)。 1. Use bridged networking(使用橋接網路)         說明:使用VMnet0虛擬交換機,此時虛擬機器相當與網路上的一臺獨立計算機與主機一樣,

徹底理解Viutual Box四網路連線方式

零、概論       VirtualBox中有4中網路連線方式: NAT、Bridged Adapter、Internal、Host-only Adapter       VMWare中有三種,其實他跟VMWare 的網路

理解虛擬機器中的四網路連線方式

VirtualBox中有4中網路連線方式: NATBridged AdapterInternalHost-only Adapter VMWare中有三種,其實他跟VMWare 的網路連線方式都是一樣概念,只是比VMWare多了Internal方式。 要讓自己(或別人)理

VirtualBox虛擬機器幾網路連線方式介紹

      為了學習和使用Linux,多數人選擇了使用VirtualBox虛擬機器的方式來安裝Linux系統。VirtualBox提供了多種網路連線方式,不同的網路連線方式決定了虛擬機器是否可以聯網,以及是否可以和宿主機互相ping通。本文將主要介紹常用的橋接、NAT和hos

Linux上兩網路連線方式

模式一:NAT方式 好處:路由器更換,或者交換機更換,網路仍然可以使用,所用使用最多 準備工作: 檢視VMware伺服器啟動情況,五個全開模式 vmnet8開啟模式 1 配置VMware交換機的ip地址,此處: 網路:VMnet8(固定) 子網ip:

虛擬機器三網路連線方式

1.bridged(橋接模式)  在這種模式下,VMWare虛擬出來的作業系統就像是區域網中的一臺獨立的主機,它可以訪問網內任何一臺機器。在橋接模式下,你需要手工為虛擬 系統配置IP地址、子網掩碼,而且還要和宿主機器處於同一網段,這樣虛擬系統才能和宿主機器進行通訊。同時,由

HttpClientHttpURLConnectionOKHttpVolley優缺點效能對比,如何選擇?

HttpURLConnection是一個多用途、輕量級的http客戶端。它對網路請求的封裝沒有HttpClient徹底,api比較簡單,用起來沒有那麼方便。但是正是由於此,使得我們能更容易的擴充套件和優化的HttpURLConnection。不過,再android2.2之前一直存在著一些令人煩的bug,比如一

VMware中BridgedNAThost-only三網路連線模式的原理及其區別

不同虛擬交換機應用在不同的聯網模式Bridged、NAT、host-only、custom四種模式,下面分別介紹其具體分配: VMnet0:這是VMware用於虛擬橋接網路下的虛擬交換機; VMnet1:這是VMware用於虛擬Host-Only網路下的虛擬交換機;  &nbs

理解VMWare的三網路連線模式(bridgedNAThost-only)

VMWare支援三種類型的網路 bridged(橋接模式) NAT(網路地址轉換模式) Host-only(主機模式) bridged(橋接模式) 在這種模式下,虛擬系統就像是區域網中的一臺獨立的主機,與宿主計算機平等的存在於網路中,你必須像對待區域網中的其他真

Vmware的三網路連線模式(bridgedNAThost-only)

看到很多朋友都在用vmware學習linux,關於虛擬機器網路設定的問題也很多,所以根據使用的經驗貼出一篇文章,針對虛擬機器網路設定的. Vmware在安裝時預設安裝了兩塊虛擬網絡卡,VMnet1和VMnet8,另外還有VMnet0。這些虛擬網絡卡的配置都是由Vmware虛

Linux學習筆記:虛擬機器設定中的各種網路連線方式詳解

說明:我本機安裝的VMWare10,吳老師的視訊教程用的是VirtualBox,配置虛擬機器連線方式是HostOnly。我在本機用VMWare使用HostOnly連線方式未配置成功:虛擬機器能ping通宿主機,但是宿主機ping不同虛擬機器,不知原因何在。因此改用

VMware三網路連線配置

前言 一直以來都是使用VMware虛擬機器來開發linux,但由於對VMware的網路連線理解不深,每次網路連接出現問題都要花不少時間去配置,所以有必要對VMware的三種網路連線方式做一個學習和總結。 正文 VMware安裝好後會在主機的《控制面板\網路和 Internet\網路連線》

VMware三網路連線模式講解

一、Bridged(橋接模式) 什麼是橋接模式?橋接模式就是將主機網絡卡與虛擬機器虛擬的網絡卡利用虛擬網橋進行通訊。在橋接的作用下,類似於把物理主機虛擬為一個交換機,所有橋接設定的虛擬機器連線到這個交換機的一個介面上,物理主機也同樣插在這個交換機當中,所以所有橋接下的網絡卡與網絡卡都是交換模

簡述python中兩網路傳輸方式(UDP,TCP)

簡述python中網路傳輸方式(UDP,TCP) socket 套接字 socket(簡稱 套接字) 是程序間通訊一個工具,它能實現把資料從一方傳輸到另外一方,完成不同電腦上程序之間的通訊, 它好比資料的搬運工 在建立socket連線時,有TCP和UDP兩種連線方式。 UDP

handlerHttpURLConnection網路資料下載綜合使用。

1. Google在設計的framework的時候禁止開發者在非UI執行緒去更新介面UI。 2.handler主要是在主執行緒中接受子執行緒傳送的資料,並根據此資料來更新UI,android提供了handler作為主執行緒和子執行緒的紐帶;  3.Message也可以指定並傳遞資料