HttpUrlConnection,HttpClient,okttp和volley、xUtils Async-http Retrofit,RXJava的認識


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 封裝好的開源庫,總之你要根據自己項目的需求來選擇使用自己的框架!
發佈了39 篇原創文章 · 獲贊 14 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章