天天看點

網絡請求架構分析

北漂中浮沉,菜鳥變老鳥,青年成大叔。
本文主要對Retrofit , OkHttp , Volley , xutils3 的優缺點進行對比分析。
           

Retrofit

retrofit是當下最好用的網絡技術架構(真不想加之一)
它是Square 公司出品的預設基于 OkHttp 封裝的一套 RESTful 網絡請求架構。
它通過代理、注解等優化封裝,使得網絡請求變得如此穩定簡單。
           

優點

簡潔好用、簡潔好用、簡潔好用重要的事情說三遍。通過注解配置網絡請求參數、代理模式簡化使用。
支援多種資料的解析&序列化格式(Gson、Json、Xml、Protobuf等等)。
可拓展性好。功能子產品高度封裝、解耦徹底。
完美支援http、https。
提供RxJava支援。
大檔案傳輸性能穩定
網絡請求回來是主線程
本質是okhttp的封裝,是以具備okhttp的優點。
           

缺點

需要詳細閱讀官網,注意一些細節,掌握成本較高。
比如:retrofit2.0後:BaseUrl要以/結尾,不要以/開頭,多種注解的用法等。
           

OkHttp

OkHttp 是 Square 公司開源的針對 Java 和 Android 程式,封裝的一個高性能網絡請求庫。
支援 spdy、http 2.0、websocket ,支援同步、異步,并封裝了線程池。
封裝了資料轉換,封裝了參數使用、錯誤處理等,api 使用起來更加友善。
           

優點

支援SPDY, 允許連接配接到同一個主機位址的所有請求,提高請求效率
共享Socket,減少對伺服器的請求次數
使用連接配接池技術減少請求的延遲(如果SPDY是可用的話) 。
自動處理GZIP壓縮減少傳輸的資料量。
緩存響應避免重複的網絡請求。
攔截器。
性能穩定,拓展性強等等。
           

缺點

網絡請求回來是子線程,需要自己手動切換到主線程。
參數調用比較複雜。
           

Volley

Volley架構在2013年Google I/O大會上被提出。
它使得Android應用網絡操作更友善更快捷;
抽象了底層HttpClient等實作的細節,讓開發者更專注與産生RESTful Request。
另外,Volley在不同的線程上異步執行所有請求而避免了阻塞主線程。
Volley在Android 2.3及以上版本,使用的是HttpURLConnection,
而在Android 2.2及以下版本,使用的是HttpClient。
           

優點

支援使用ImageRequest來請求圖檔,也就是說支援ImageLoader和NetworkImageView。
拓展性強
           

缺點

不支援post大資料,是以在大資料量傳輸時經常挂掉。
封裝的圖檔加載不是很強大,複雜些的圖檔需求無法完全滿足。
Google在6.0已經廢棄了httpClient,而Volley也停止了更新。
           

xutils3

xUtils3是基于Afinal開發的目前功能比較完善的一個Android開源架構,功能十分強大。
相比于舊版本的xUtils:
    HTTP實作替換HttpClient為UrlConnection, 自動解析回調泛型, 更安全的斷點續傳政策;
    支援标準的Cookie政策, 區分domain, path;
    事件注解去除不常用的功能, 提高性能;
    資料庫api簡化提高性能, 達到和greenDao一緻的性能;
           

優點

包含了很多實用的android工具:ViewUtils(代替findviewbyid、控件事件綁定)
,HttpUtils(網絡請求),BitmapUtils(圖檔加載),DbUtils(操作資料庫)LogUtils(日志列印)等。
支援超大檔案(超過2G)上傳。
有更全面的http請求協定支援。
擁有靈活的Orm。
支援事件注解且不受代碼混淆影響。
           

缺點

正因為包含多種工具,是以顯得臃腫。
圖檔綁定雖然支援了gif,但是受系統相容性影響, 部分gif檔案隻能靜态顯示。
Xutils對android6.0以上相容性不好,建議使用Xutils3
拓展性差
使用中bug較多
           

總結

  1. 不建議使用Volley,其不支援大檔案傳輸的bug是緻命缺點,項目目前不用大資料傳輸,不代表之後不用,到那時候改網絡架構的話想死的心都有了。
  2. 推薦使用Retrofit,其解耦性更好,拓展性更強,穩定性高,使用簡潔,因其預設使用okhttp是以性能較Volley和Xutils更好。
  3. 如果對Retrofit不是很了解,建議使用封裝後的okHttp。github上有很多比較好的封裝okhttp的網絡架構,比如:hongyang大神的OKHttpUtils、okhttpFinal等
  4. xUtils3的網絡請求沒有okhttpt和Retrofit性能好,圖檔加載沒有fresco強大、沒有glide穩定、資料庫操作沒有greendao性能高,但是它确實最完善的架構,一招在手,能幹所有,是以,如果是特别小的項目,可以容忍xUtils的小缺點的話,xUtils3也是可以考慮采用的。