編輯:關於Android編程
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.15.0
緩存
重試
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。
Apache HttpClient早就不推薦httpclient,5.0之後干脆廢棄,後續會刪除。6.0刪除了HttpClient。Java開發用HttpClient,官方推薦Android開發用HttpUrlConnection。
DefaultHttpClient和它的兄弟AndroidHttpClient都是HttpClient具體的實現類,它們都擁有眾多的API,而且實現比較穩定,bug數量也很少。
但同時也由於HttpClient的API數量過多,使得我們很難在不破壞兼容性的情況下對它進行升級和擴展,所以,目前Android團隊在提升和優化HttpClient方面的工作態度並不積極。
高效穩定,但是維護成本高昂,故android 開發團隊不願意在維護該庫而是轉投更為輕便的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/SPDY,SPDY(發音如英語: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分鐘,等等。你要根據具體情況所需數據的時效性情況給出不同的方案。當然你也可以全部都一樣的緩存策略,看你自己。
Volley是一個簡化網絡任務的庫。他負責處理請求,加載,緩存,線程,同步等問題。它可以處理JSON,圖片,緩存,文本源,支持一定程度的自定義。
Volley在Android 2.3及以上版本,使用的是HttpURLConnection,而在Android 2.2及以下版本,使用的是HttpClient。
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 Httpstack作為其傳輸層,在Gingerbread及之後的版本上使用HttpURLConnectionstack作為傳輸層。原因是在不同的安卓版本中這兩種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操作,所有才會慢。
1、HttpClient: 在Android 2.2版本之前,HttpClient擁有較少的bug,因此使用它是最好的選擇。
2、HttpURlConnection: 而在Android 2.3版本及以後,HttpURLConnection則是最佳的選擇。它的API簡單,體積較小,因而非常適用於Android項目。
對於新的應用程序應該更加偏向於使用HttpURLConnection,因為在以後的工作當中我們也會將更多的時間放在優化HttpURLConnection上面。
谷歌自己也是推薦用HttpUrlConnection,對它進行了大量的優化,這個從安卓的幫助文檔可以看出來:
http://developer.android.com/reference/java/net/HttpURLConnection.html
3、OkHttp:是一個相對成熟的解決方案,我們更有理由相信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次。
誤差說明:第三方軟件計算,受後台應用影響,存在一定誤差。
誤差說明:第三方軟件計算,受後台應用影響,存在一定誤差。
結論:測試機型總體上CPU占用率,OkHttp的網絡請求略低於其它聯網方式。
誤差說明:第三方軟件計算,受後台應用影響,存在一定誤差。
結論:測試機型總體上內存占用情況,在小米手機上,OkHttp的網絡請求消耗內存略低於其它聯網方式。在魅族手機上,內存消耗略高於其它方式。顯示出測試機型內存消耗表現不一。
誤差說明:第三方軟件計算,受後台應用影響,存在一定誤差。
結論:OkHttp的網絡請求消耗的電量百分比在略低於其它聯網方式,消耗的總電量在小米手機上高於其它聯網方式,在魅族手機上略低於其它聯網方式。消耗電量的差異不大,在0.5mah以內。
誤差說明:網絡請求的發送和接收流量存在一定誤差。
結論:
1、網絡發送流量HttpURLConnection最高,Volley次之,OKHttp第三位,HttpClient最少。但是,數據量差別不大,零點幾的請求差別。
2、累積接收流量HttpClient最大,HttpURLConnection和Volley相同,OkHttp略大於前兩者。
誤差說明:網絡的狀況可能會影響網絡請求時間。
結論:網絡請求平均耗時HttpClient最大,HttpURLConnection最小,Volley平均比前者高10ms~20ms,OkHttp比Volley高20ms~40ms。
1、對於新的應用程序,應該更加偏向於使用HttpURLConnection,因為在以後的工作當中Google也會將更多的時間放在優化HttpURLConnection上面。
谷歌自己也是推薦用HttpUrlConnection,對它進行了大量的優化,這個從安卓的幫助文檔可以看出來:
http://developer.android.com/reference/java/net/HttpURLConnection.html
2、對於已經成熟的應用, Volley停止了更新,而OkHttp得到了官方的認可,並在不斷優化。
因此我建議使用OkHttp,現在最新穩定版為3.2.0
一 、為什麼要用fragment簡單來講,兩句話- 解決局部刷新問題- 一定程度解決屏幕適配問題二 、什麼是fragmentfragment直譯過來是“碎片&
依照郭霖老師的《第一行代碼Android》,今天我要來學習Activity,首先來初步了解Activity,基本上就是照葫蘆畫瓢的模式,有點回到當初敲java的hello
今天做一個小Demo用到了SoundPool,總結一下。MediaPlayer缺點:不能重疊播放音樂,封裝程度比較高,所以加載起來會比較慢。SoundPool簡介Andr
一、概述在之前一個項目中,因為涉及到數據庫,所以就接觸到了ORM框架的GreenDao。後面就去網上大量的搜索下載學習,發現很多都是官網的翻譯或者是官網DEMO的簡單入門