幾種網路框架的比較
引言
目前來說單純的網路框架請求庫就鎖定在了Volley、OkHttp、Retrofit三個,android-async-http的作者已經不維護,所以這裡就不多說了,下面我們分別來說說這三個庫的區別。
okhttp
okhttp是Square公司開源的針對Java和Android程式,封裝的一個高效能http請求庫,所以它的職責跟HttpUrlConnection是一樣的,支援spdy、http2.0、websocket,支援同步、非同步、,而且Okhttp又封裝了執行緒池,封裝了資料轉,封裝了引數使用,封裝了資料轉換,封裝了引數使用、錯誤處理等,api使用起來更加方便。可以把它理解成是一個封裝之後類似HttpUrlConnection的一個東西,但是你在使用的時候仍需自己再做一層封裝,這樣才能使用一個框架一樣更加順手。
**Volley** Volley是Google官方出的一套小而巧的非同步請求庫,該框架封裝的擴充套件性很強,支援HttpClient、HttpUrlconnection,甚至支援OkHttp,具體的方法可以看Jake大神的這個Gist檔案: https://gist.github.com/JakeWharton/5616899 而且Volley裡面也封裝了ImageLoader,所以如果你願意你甚至不需要使用圖片載入框架,不過這個功能沒有一些專門的圖片載入框架強大,對於簡單的需求可以使用,對於稍微複雜點的需求還是需要用到專門的圖片載入框架。 Volley也有缺陷,比如不支援post大資料,所以不適合上傳檔案。不過Volley設計的初衷本身也就是為頻繁的、資料量小的網路請求而生! 關於Volley的具體用法可以見在GitHub的一個demo: https://github.com/stormzhang/AndroidVolley
Retrofit
Retrofit是Square公司出品的預設基於OkHttp封裝的一套RESTful網路請求框架,不瞭解RESTful概念的不妨去搜索學習下,RESTful可以說是目前流行的一套api設計的風格,並不是標準。
REtrofit的封裝可以說是很強大,裡面涉及到一堆的設計模式,你可以通過註解直接配置請求,你可以使用不同的http客戶端,雖然預設是用http,可以使用不同Json Converter來序列化資料,同時提供對RxJava的支援,使用Retrofit+OkHttp+Rxjava+Dagger2可以說是目前比較潮的一套框架,但是需要比較高的門檻。
使用方法與地址
Volley VS OkHttp
毫無疑問Volley的優勢在於封裝的更好,而使用OkHttp你需要有足夠的能力再進行一次封裝。而OkHtttp的優勢在於效能更高,因為OkHttp基於NIO和Okio,所以效能上要比Volley更快。
估計有些不理解IO和NIO的概率,這裡姑且簡單提下,這兩個都是Java中的概念,如果我從硬碟讀取資料,第一種方式是程式一直等,資料讀完後才能繼續操作,這中是最簡單的也叫阻塞式IO,還有一種就是你讀你的,我程式接著往下執行,等資料處理完你再來通知我,然後再處理回撥。而第二種就是NIO的方式,非阻塞式。
所以NIO當然要比IO的效能要好了,而Okio是Square公司基於IO和NIO基礎上做的一個更簡單、高效處理資料流的一個庫。
理論上如果Volley和Okhttp對比的話,我更傾向於使用Volley,因為Volley內部同樣支援使用OkHttp,這點OkHttp的效能優勢就沒有了,而且Volley本身封裝的也更易用,擴充套件性更好些。
Volley VS Retrofit
這兩個庫都做了非常不錯的封裝,但是Retrofit解耦的更徹底,尤其是Retrofit2.0出來,Jake對之前1.0設計不合理的地方做了大量重構,職責更細分,而且Retrofit預設使用Okhttp,效能上也要比Volley佔優勢,再有如果你的專案如果採用了RxJava,那更改使用Retrofit。
所以說這兩個庫相比,Retrofit毫無疑問更有優勢,你在能掌握兩個框架的前提下改優先使用Retrofit。但是個人認為Retrofit門檻要比Volley稍高些,你要理解他的原理,各種用法,想徹底搞明白還是需要花些功夫的,如果你對它一知半解,那還是建議在商業專案使用Volley吧。
總結;
優先使用Retrofit,前提是最好你們的後臺api也能遵循RESTful的風格,其次如果你不想使用或者沒能力掌握Retrofit,那麼推薦使用Volley,畢竟Volley你不需要做過多的封裝,當然如果你們需要上傳大資料,那麼不建議使用Volley,你該採用OkHttp。