1. 程式人生 > >安卓開發常用網路請求框架OkHttp、Volley、XUtils、Retrofit對比

安卓開發常用網路請求框架OkHttp、Volley、XUtils、Retrofit對比

網路請求框架總結
1.xutils  
   此框架龐大而周全,這個框架可以網路請求,同時可以圖片載入,又可以資料儲存,又可以 View 註解,使用這種框架很方便,這樣會使得你整個專案對它依賴性太強,萬一以後這個庫不維護了,或者中間某個模組出問題了,這個影響非常大,所以在專案開發時,一般會更喜歡選擇專注某一領域的框架。

2.OkHttp
    Android 開發中是可以直接使用現成的api進行網路請求的,就是使用HttpClient、HttpUrlConnection 進行操作,目前HttpClient 已經被廢棄,而 android-async-http 是基於HttpClient的,可能也是因為這個原因作者放棄維護。
 而OkHttp是Square公司開源的針對Java和Android程式,封裝的一個高效能http請求庫,它的職責跟HttpUrlConnection 是一樣的,支援 spdy、http 2.0、websocket ,支援同步、非同步,而且 OkHttp 又封裝了執行緒池,封裝了資料轉換,封裝了引數使用、錯誤處理等,api使用起來更加方便。可以把它理解成是一個封裝之後的類似HttpUrlConnection的東西,但是在使用的時候仍然需要自己再做一層封裝,這樣才能像使用一個框架一樣更加順手。

3.Volley
   Volley是Google官方出的一套小而巧的非同步請求庫,該框架封裝的擴充套件性很強,支援HttpClient、HttpUrlConnection,
 甚至支援OkHttp,而且Volley裡面也封裝了ImageLoader,所以如果你願意你甚至不需要使用圖片載入框架,不過這塊功能沒有一些專門的圖片載入框架強大,對於簡單的需求可以使用,稍複雜點的需求還是需要用到專門的圖片載入框架。Volley也有缺陷,比如不支援post大資料,所以不適合上傳檔案。不過Volley設計的初衷本身也就是為頻繁的、資料量小的網路請求而生。

4.Retrofit
   Retrofit是Square公司出品的預設基於OkHttp封裝的一套RESTful網路請求框架,RESTful是目前流行的一套api設計的風格, 並不是標準。Retrofit的封裝可以說是很強大,裡面涉及到一堆的設計模式,可以通過註解直接配置請求,可以使用不同的
http客戶端,雖然預設是用http ,可以使用不同Json Converter 來序列化資料,同時提供對RxJava的支援,使用Retrofit + OkHttp + RxJava + Dagger2 可以說是目前比較潮的一套框架,但是需要有比較高的門檻。 

5.Volley VS OkHttp
  Volley的優勢在於封裝的更好,而使用OkHttp你需要有足夠的能力再進行一次封裝。而OkHttp的優勢在於效能更高,因為 OkHttp基於NIO和Okio ,所以效能上要比 Volley更快。IO 和 NIO這兩個都是Java中的概念,如果我從硬碟讀取資料,第一種方式就是程式一直等,資料讀完後才能繼續操作這種是最簡單的也叫阻塞式IO,還有一種是你讀你的,程式接著往下執行,等資料處理完你再來通知我,然後再處理回撥。而第二種就是 NIO 的方式,非阻塞式, 所以NIO當然要比IO的效能要好了,而 Okio是 Square 公司基於IO和NIO基礎上做的一個更簡單、高效處理資料流的一個庫。理論上如果Volley和OkHttp對比的話,更傾向於使用 Volley,因為Volley內部同樣支援使用OkHttp,這點OkHttp的效能優勢就沒了,  而且 Volley 本身封裝的也更易用,擴充套件性更好些。 

6.OkHttp VS Retrofit
   毫無疑問,Retrofit 預設是基於 OkHttp 而做的封裝,這點來說沒有可比性,肯定首選 Retrofit。 

7.Volley VS Retrofit 
  這兩個庫都做了不錯的封裝,但Retrofit解耦的更徹底,尤其Retrofit2.0出來,Jake對之前1.0設計不合理的地方做了大量重構, 職責更細分,而且Retrofit預設使用OkHttp,效能上也要比Volley佔優勢,再有如果你的專案如果採用了RxJava ,那更該使用  Retrofit 。所以這兩個庫相比,Retrofit更有優勢,在能掌握兩個框架的前提下該優先使用 Retrofit。但是Retrofit門檻要比Volley稍高些, 要理解他的原理,各種用法,想徹底搞明白還是需要花些功夫的,如果你對它一知半解,那還是建議在商業專案使用Volley吧。 

8.總結
  綜上,如果以上三種網路庫你都能熟練掌握,那麼優先推薦使用Retrofit,前提是最好你們的後臺api也能遵循RESTful的風格, 其次如果不想使用或者沒能力掌握Retrofit ,那麼推薦使用Volley ,畢竟Volley不需要做過多的封裝,如果需要上傳大資料,

相關推薦

開發常用網路請求框架OkHttpVolleyXUtilsRetrofit對比

網路請求框架總結1.xutils     此框架龐大而周全,這個框架可以網路請求,同時可以圖片載入,又可以資料儲存,又可以 View 註解,使用這種框架很方便,這樣會使得你整個專案對它依賴性太強,萬一以後這個庫不維護了,或者中間某個模組出問題了,這個影響非常大,所以在專案開發時,一般會更喜歡選擇專注某一領域的

Android常用網路請求框架xUtilsOkHttpVolleyRetorfit對比

網路請求框架總結1.xutils     此框架龐大而周全,這個框架可以網路請求,同時可以圖片載入,又可以資料儲存,又可以 View 註解,使用這種框架很方便,這樣會使得你整個專案對它依賴性太強,萬一以後這個庫不維護了,或者中間某個模組出問題了,這個影響非常大,所以在專案開發時,一般會更喜歡選擇專注某一領域

網路請求框架----OkHttp原理

一.前言 在 Android 中,網路請求是一個必不可少的功能,因此就有許多代表網路請求客戶端的元件庫,具有代表性的有下面三種: Apache 的 HTTP 客戶端元件 HttpClient。 Java JDK 自帶的 HttpURLConnection

swift 常用網路請求框架 Alamofire

let url="\(BASEURL)"+LUNBOURL     let image:UIImage=UIImage.init(named:"bannerhomeOne")!     //獲取資料     func normalGetData()  {  //ge

開發常用工具和第三方庫彙總

一般提示 庫最有價值的地方在於可逆:你將庫新增到你的應用程式中,之後也可以將其刪除(沒有任何開銷)。隨時都能拿出來。不是所有的東西都可以這樣,但如果它可以的話,請把它做成一個庫,而不是和你的應用終生綁在一起。 一個更好的方法是在把你的庫封裝起來。如果你自己的類呼叫了庫

如何獨立開發一個網路請求框架

1 package com.lghsaleimage; 2 3 import android.graphics.Bitmap; 4 import android.os.Handler; 5 import android.os.Message; 6 import andr

打造屬於自己的網路請求框架(OKHttp+Retrofit+RxJava)

開發者們現在都在使用OkHttp了,在很多借鑑之後,現在也來封裝屬於自己的網路請求框架。 該框架使用Retrofit,OkHttp,RxJava,RxAndroid,Gson一起封裝。 客戶端請求一般分為如下幾步: 通過API向伺服器傳送請求------->伺服器收到

開發常用方法集合

我將一年以來安卓開發的經驗寫成一個專案,提供很多便利而實用的方法,供大家使用。 本專案包含許多常用的工具方法,如系統相關的、應用相關的、命令列相關的、網路相關的、檔案相關的、日期相關的、正則相關的、UI相關的等等。 使用方法也非常簡單: 1.將本專案匯

開發學習之014 Button應用詳解(樣式背景按鈕單擊長按雙擊多擊事件)

一、Button簡介 按鈕也是繼承自TextView 二、XML定義方法 <Button android:id="@+id/button01" android:layout_width="w

開發 RecycleView 中notifyItemRemoved遇到的那些坑, IndexOutOfIndexException刪除錯亂,陣列越界等終極解決方案,多人親測可行

當我們在開發過程中要刪除RecycleView中的某個item時,都喜歡notifyItemRemoved方法帶來的動畫效果,然而,會遇到錯亂的坑,主要有三個,如下: 再刪除後面的item,會發生錯

網路請求框架第三彈——OkHttp的封裝

概述:此篇為Android網路請求框架第三彈,底層請求用的是okhttp 基本機構來自包建強老師的app研發錄,在研發錄中,包老師使用的是HttpClient,但是由於google在Android4.0之後刪除了HttpClient的APi,所以在包老師的基礎,

專案實戰之強大的網路請求框架okGo使用詳解(六):擴充套件專案okServer,更強大的下載上傳功能,支援斷點和多工管理

OkGo與OkDownload的區別就是,OkGo只是簡單的做一個下載功能,不具備斷點下載,暫停等操作,但是這在很多時候已經能滿足需要了。 而有些app需要有一個下載列表的功能,就像迅雷下載一樣,每個下載任務可以暫停,可以繼續,可以重新下載,可以有下載優先順序,這時候OkDownload就有

專案實戰之強大的網路請求框架okGo使用詳解(五):擴充套件專案okRx,完美結合RxJava

前言 在第一篇講解okGo框架新增依賴支援時,還記得我們額外新增的兩個依賴嗎,一個okRx和一個okServer,這兩個均是基於okGo框架的擴充套件專案,其中okRx可以使請求結合RxJava一起使用,而okServer則提供了強大的下載上傳功能,如斷點支援,多工管理等,本篇我們主要講

專案實戰之強大的網路請求框架okGo使用詳解(四):Cookie的管理

Cookie概念相關 具體來說cookie機制採用的是在客戶端保持狀態的方案,而session機制採用的是在伺服器端保持狀態的方案。同時我們也看到,由於採用伺服器端保持狀態的方案在客戶端也需要儲存一個標識,所以session機制是需要藉助於cookie機制來達到儲存標識的目的,所謂ses

專案實戰之強大的網路請求框架okGo使用詳解(三):快取的使用

相關實體類必須實現序列化介面 使用快取前,必須讓涉及到快取javaBean物件實現Serializable介面,否者會報NotSerializableException。因為快取的原理是將物件序列化後直接寫入資料庫中,如果不實現Serializable介面,會導致物件無法序列化,進而無法

專案實戰之強大的網路請求框架okGo使用詳解(二):深入理解Callback之自定義JsonCallback

前言 JSON是一種取代XML的資料結構,和xml相比,它更小巧但描述能力卻不差,由於它的小巧所以網路傳輸資料將減少更多流量從而加快了傳輸速度,目前客戶端伺服器返回的資料大多都是基於這種格式的,相應的我們瞭解的關於json的解析工具主要有兩個:Gson(Google官方出的)和fas

專案實戰之強大的網路請求框架okGo使用詳解(一):實現get,post基本網路請求,下載上傳進度監聽以及對Callback自定義的深入理解

1.新增依賴 //必須使用 compile 'com.lzy.net:okgo:3.0.4' //以下三個選擇新增,okrx和okrx2不能同時使用,一般選擇新增最新的rx2支援即可 compile 'com.lzy.net:okrx:1.0.2' compile 'com.lzy

開發介面回撥經典案例網路請求

在Android中到處可見介面回撥機制,尤其是UI事件處理方面。然後一般重新整理ui的處理:廣播,介面回撥,handle或者使用eventbus或是otto,總的來說也就是個監聽模式的使用吧。 回撥函式解釋 回撥函式就是一個通過函式指標呼叫的函式。如果你

Android網路請求OkHttp框架

首先宣告許可權 <uses-permission android:name="android.permission.INTERNET"/> 在build.gradle中加入 compile 'com.squareup.okhttp:okhttp:2.4.0' compile

開發網路相關bug解決方案

兩個bug: 1: android.os.NetworkOnMainThreadException 原因:因為main執行緒要處理UI,預設不能使用網路導致假死 Android這個設計是為了防止網路請求時間過長而導致介面假死的情況發生。解決方案有兩個,一個是使用StrictMode,二是使用