編輯:關於Android編程
android-async-http
retrofit
okhttp
他們各有優劣,之前個人則比較喜歡用Android-async-http, 如今Google推出了官方的針對Android平台上的網絡通信庫,能使網絡通信更快,更簡單,更健壯,Volley在提供了高性能網絡通訊功能的同時,對網絡圖片加載也提供了良好的支持,完全可以滿足簡單REST客戶端的需求, 我們沒有理由不跟上時代的潮流
下載Volley源碼並build jar包。
$ git clone https://android.googlesource.com/platform/frameworks/volley $ cd volley $ android update project -p $ ant jar
然後把生成的jar包引用到我們的項目中,extras目錄下則包含了目前最新的volley源碼。
此Demo主要介紹了日常網絡開發常用的基本功能,但volley的擴展性很強,可以根據需要定制你自己的網絡請求。
volley視頻地址:http://www.youtube.com/watch?v=yhv8l9F44qo&feature=player_embedded
以上是在Google IO的演講上ppt的配圖,從上面這張圖我們可以看出,volley適合快速,簡單的請求(Json對象,圖片加載)。
volley的特性:
接下來,我們來學習簡單的使用下volley給我提供的API吧。
1.首先拿到一個請求隊列(RequestQueue只需要一個實例即可,不像AsyncTask每次使用都要new一個)
[java]view plaincopy
由於用法都相差不大,我就不一一舉例了,舉幾個常用有代表性的例子:
以下代碼是StringRequest的get請求:
[java]view plaincopy[java]view plaincopy
[java]view plaincopy
volley不僅提供了這些請求的方式,還提供了加載圖片的一些方法和控件:
比如我們一個列表需要加載很多圖片我們可以使用volley給我們提供的ImageLoader(ImageLoader比ImageRequest更加高效,因為它不僅對圖片進行緩存,還可以過濾掉重復的鏈接,避免重復發送請求。)
[java]view plaincopy
[java]view plaincopy
[html]view plaincopy
[java]view plaincopy
1.activity自動銷毀時它會自定取消所有請求。
2.給請求設置標簽:
[java]view plaincopy
取消所有指定標記的請求:
[java]view plaincopy
其中藍色部分代表主線程,綠色部分代表緩存線程,橙色部分代表網絡線程。我們在主線程中調用RequestQueue的add()方法來添加一條網絡請求,這條請求會先被加入到緩存隊列當中,如果發現可以找到相應的緩存結果就直接讀取緩存並解析,然後回調給主線程。如果在緩存中沒有找到結果,則將這條請求加入到網絡請求隊列中,然後處理發送HTTP請求,解析響應結果,寫入緩存,並回調主線程。
接下來我們要看看如何把volley使用到實戰項目裡面,我們先考慮下一些問題:
從上一篇來看mQueue 只需要一個對象即可,new RequestQueue對象對資源一種浪費,我們應該在application,以及可以把取消請求的方法也在application進行統一管理,看以下代碼:
[java]view plaincopy
接下來我們來看看,如何自定義Request
XmlRequest:
[java]view plaincopy
[java]view plaincopy
[java]view plaincopy
[java]view plaincopy
[html]view plaincopy
下面主要是講Volley在某些細節方面的選擇和實現.值得我們學習的地方以及如果更好的使用Volley。
1.Volley本地緩存為什麼有時候不會進行緩存?
緩存使用前提服務器必須支持,緩存,配置Cache-Control頭信息,
因為Volley需要從這些頭信息判斷緩存是否已經過期。如果已經過期Volley將會重新從網絡獲取數據。
本人用抓包工具抓了無法緩存的返回頭信息
可以支持緩存的頭信息
2.如果我們自己寫一個網絡請求框架,我們內部實現會選擇使用HttpURLConnection還是HttpClient?
我們通過源碼來看看Volley是如何選擇使用的
[java]view plaincopy
從這點我們可以學習到,要針對不同SDK版本做去相應更優的處理方式,這樣才能達到最好的效果。
3.Volley給我們提供了ImageRrequest,ImageLoader,NetworkImageView,它們分別使用於什麼場景為什麼?
單張圖片的加載可以通過發起 ImageReuqst 請求來實現,但為了應用內存緩存,推薦使用ImageLoader
NetwoekImageView專門用於批量圖片加載的場景:
[java]view plaincopy
小米手環是小米公司自主研發的電子智能輔助器,最近小米手環APP迎來了一次更新,多了幾個新功能,同時在微信接入位置也發生了改變,今天當下小編就小米手環如何接入
ListView網上資料很多,我所知擴展性最好、最通用的代碼做個備忘。總體上來講:ListView+BaseAdapter+xml文件實現:話不多說,先貼個圖,預期效果如
上文介紹了如何在windows中安裝calabash-android的測試環境,本文用一個實例來介紹calabash-android的基本用法。 本文所用的
一丶本地音樂加載相當於就是listVIew應用扣丁音樂1.0前部分(gif圖大小限制)演示: 實體類Mp3Info(歌曲相關數據及get和set方法)