標籤:volley
對於 Android 應用開發,基於網路請求的開源架構有不少,我喜歡用的就是 AsyncHttpClient,UniversalImageLoader。原想法是在架構中封裝一套通用的請求與返回介面,那麼以後項目底層不管用什麼架構進行網路請求,都不會修改業務層代碼,實現業務與準系統的分離,方便後期的最佳化,擴充。後來跟阿里的一位朋友聊到這塊,談到android端的網路請求,覺得一款牛逼的應用,尤其的是網路請求模組,應該有一套自己的東西,而不是用別人的,突然覺得很有道理,有必要選擇一套自己網路架構,方便以後做老大 :)
首先想到一些記憶體,省電,線程池等諸多關鍵因素,再集合當前的一些開源架構,發現 AsyncHttpClient 也是有bug 的,而且如果用 AsyncHttpClient,對於listview等網路請求,我還得引入諸如 UniversalImageLoader 來對圖片進行專門的處理,以前用過volley ,覺得很不錯,沒有深入研究,現在研究了下,發現也是有一些問題的,比如不能進行上傳下載大檔案,沒有進度等,不過 volley 對 android做了很多最佳化,不支援大檔案上傳下載也是有原因的,比如設定了掃描線程的優先順序,使之更省電,對 2.2 以上和以下版本的網路請求做了分別處理,2.2以下用了AndroidHttpClient,2.3以上使用了 HttpUrlConnection,具體原因見 http://blog.csdn.net/guolin_blog/article/details/12452307 。覺得 Android 系統是Google推出的,Volley 是Google工程師在 2013 I/O大會上推出的,最正統,遂決定研究 volley ,擴充 volley 。
看了兩天,發現 volley 在啟動時,緩衝了 主線程的 Handler,那麼以後無論在主線程 or 子線程執行 volley網路請求,返回執行 onResponse 時都是主線程在執行,這是特性之一,然後接著發現 volley 初始化時開啟了5個掃描線程,其中1個 緩衝掃描線程,4個非緩衝掃描線程,當添加一個請求時,先檢查緩衝是否已經有了,有則直接返回,否則再執行網路請求,這裡應該就是對多圖片請求的最佳化,volley 看翻譯意思是 “萬箭齊發”,寓意為載入圖片像萬箭齊射一樣快,後期有空看能不能再搞個 下載上傳進度 功能,那就完美了。
【Android架構進階〖04〗】MDevil 之 網路模組 Volley