HttpClient
有連個實現類,DefaultHttpClient和它的兄弟AndroidHttpClient,提供的api較多,在開發時兼容性不太給力。
HttpClient(android6.0移除了HttpClient)所以個人認爲,既然android都不建議用了,還是略過吧
HttpURLConnection
是基於HTTP協議的,其底層通過socket通信實現(socket在在這裏不詳細說明了,自行百度)
api相對的比較簡單,Android 2.2版本之前,有嚴重的bug, (bug是:使用close方法的時候會影響連接池)
所以建議在android 2.3以後使用HttpUrlConnection,2.3之前使用HttpClient。
從Android4.4開始HttpURLConnection的底層實現採用的是okHttp(所以,基於這兩種,應該在看一看okhttp吧)
OkHttp
是 Square 公司開源的針對 Java 和 Android 程序,封裝的一個高性能
http 請求庫,所以它的職責跟 HttpUrlConnection 是一樣的,支持 spdy、http 2.0、 websocket ,支持同步、異步,而且 OkHttp 又封裝了線程池,封裝了數據轉換,封裝了參數使用、錯誤處理等,api 使用起來更加方便。可以把它理解成是一個封裝之後的類似 HttpUrlConnection 的一個東西,但是你在使用的時候仍然需要自己再做一層封裝,這樣才能像使用一個框架一樣更加順手。
volley:(框架): 底層: volley在android2.2以下使用httpClient,2.2以上使用HttpURLConnection
能使網絡通信更快,更簡單,更健壯,擴展性更好一點
Get,Post網絡請求及網絡圖像的高效率異步處理請求
可以對網絡請求進行排序優先級管理
支持網絡請求的緩存
多級別取消請求
使用Volley可以簡化一些網絡通信的開發。不適合大數據和流媒體的網絡請求。例如上百兆文件、視頻下載
Async-http(框架) 底層: 使用httpClient
清晰的網絡請求回調
請求使用ThreadPool,限制併發資源使用情況
GET/POST基於參數構建使用(RequestParams)
支持Multipart文件上傳,大數據上傳下載
內置響應解析成JSON
持久化cookie存儲,保存cookie到你的應用程序的SharedPreferences
支持二進制文件(圖片等)的下載
想必你肯定知道6.0之後HttpClient不是系統自帶的了,不過它在最近的更新中將HttpClient的所有代碼copy了一份進來,所以還能使用。
okttp(框架):
OkHttp 是 Square 公司開源的針對 Java 和 Android 程序,封裝的一個高性能
http 請求庫,所以它的職責跟 HttpUrlConnection 是一樣的,支持 spdy、http 2.0、 websocket ,支持同步、異步,而且 OkHttp 又封裝了線程池,封裝了數據轉換,封裝了參數使用、錯誤處理等,api 使用起來更加方便。可以把它理解成是一個封裝之後的類似 HttpUrlConnection 的一個東西,但是你在使用的時候仍然需要自己再做一層封裝,這樣才能像使用一個框架一樣更加順手。
•okhttp是高性能的http庫,支持同步、異步,而且實現了spdy、http2、websocket協議,api很簡潔易用,和volley一樣實現了http協議的緩存。
Retrofit(框架)底層;基於okhttp:
Square公司還出了一個Retrofit庫配合OkHttp戰鬥力翻倍。(強烈推薦)它是基於okhttp的
Retrofit的跟Volley是一個套路,但解耦的更徹底:比方說通過註解來配置請求參數,通過工廠來生成CallAdapter,Converter,你可以使用不同的請求適配器(CallAdapter), 比方說RxJava,Java8, Guava。你可以使用不同的反序列化工具(Converter),比方說json, protobuff, xml, moshi等等。
(新框架)RxJava:
RxJava 是一個響應式編程框架,採用觀察者設計模式。所以自然少不了 Observable 和 Subscriber 這兩個東東了。
本人有關於Rxjava詳細的使用講解,http://blog.csdn.net/qq_35681180/article/details/53104233
Xutil:
xUtils 最初源於Afinal框架,進行了大量重構,使得xUtils支持大文件上傳,更全面的http請求協議支持(10種謂詞),擁有更加靈活的ORM,更多的事件註解支持且不受混淆影響...
xUtils最低兼容android 2.2 (api level 8)。 當前xUtils主要有四大模塊:
DbUtils模塊
android中的orm框架,一行代碼就可以進行增刪改查;
支持事務,默認關閉;
可通過註解自定義表名,列名,外鍵,唯一性約束,NOT NULL約束,CHECK約束等(需要混淆的時候請註解表名和列名);
支持綁定外鍵,保存實體時外鍵關聯實體自動保存或更新;
ViewUtils模塊
android中的ioc框架,完全註解方式就可以進行UI,資源和事件綁定;
新的事件綁定方式,使用混淆工具混淆後仍可正常工作;
HttpUtils模塊
支持同步,異步方式的請求;
支持大文件上傳,上傳大文件不會oom;
支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT請求;
BitmapUtils模塊
加載bitmap的時候無需考慮bitmap加載過程中出現的oom和android容器快速滑動時候出現的圖片錯位等現象;
支持加載網絡圖片和本地圖片;
內存管理使用lru算法,更好的管理bitmap內存;
如果以上網絡庫你都能熟練掌握,那麼優先推薦使用 Retrofit ,前提是最好你們的後臺 api 也能遵循 RESTful 的風格,其次如果你不想使用或者沒能力掌握 Retrofit ,那麼推薦使用 Volley ,畢竟 Volley 你不需要做過多的封裝,當然如果你們需要上傳大數據,那麼不建議使用 Volley,否則你該採用 OkHttp 。
最後,可能有些人會糾結 Volley 與 OkHttp 的選擇,那是因爲我認爲 OkHttp 還是需要一定的能力做一層封裝的,如果你有能力封裝的話那不如直接用 Retrofit 了,如果沒能力封裝還是乖乖的用 Volley 吧,如果你能有一些不錯的基於 OkHttp 封裝好的開源庫,總之你要根據自己項目的需求來選擇使用自己的框架!