volley對所有的請求都有本地快取,對同一請求一般先從快取中獲取,獲取不到再從網路獲取。通常對進行**快取也是同樣的思路。
為乙個thread,run()是乙個死迴圈。與網路方互動的邏輯如下:
cache.entry entry = mcache.get(request.getcachekey());
if (entry == null)
如果cache中取不到,扔到網路中處理的佇列中,然後由網路在該佇列中取出請求,執行相應的網路操作。
整體思路為:將網路與快取的處理分成單獨的類,避免了在類中對cache獲取物件的if判斷,看起來優雅。
為volley中載入的類,也涉及到對的**快取。但imageloader只提供了乙個imagecache介面,並沒有細分記憶體、sd卡等。這種設計方式,使得imageloader非常簡潔——它將所有的快取都當imagecache,不需要先判斷記憶體中有沒有,再判斷sd卡中有沒有,最後再從網路中獲取,然後新增到記憶體、sd卡中等,使得整個imageloader的判斷減少,看起來更舒服。
而外界對於記憶體、sd卡等快取的處理,可以採用責任鏈模式。只是在處理結果時,需要將返回的結果新增到受理類前面的類中。
volley對每乙個請求都進行了重試。主要的邏輯在於basicnetwork#performrequest中。它是乙個死迴圈,如果請求成功,直接return乙個結果,迴圈結束。如果失敗,會呼叫attemptretryonexception(),該方法內部會呼叫每乙個request指定的retry策略——預設只是將重試次數加一,並且將重試次數達到一定次數之後直接throw error,使得performrequest的迴圈因為異常而結束。
這就是整個請求的重試策略,簡單簡單粗暴,但又能保證了每乙個請求都會被重試固定的次數。
網路訪問之Volley
volley請求的請求種類 1 stringrequest 返回結果是乙個字串 1.建立乙個請求 string url stringrequest stringrequest new stringrequest url,new response.listener new response.error...
網路程式設計 初識Volley之Request的使用
參考自 public class volleyutils public static synchronized volleyutils newinstance context context return volleyutils public requestqueue getrequestqueue...
android網路開源框架volley之一
五月份的google i o 2013開發者大會上,google發布了開源的網路框架volley,聽說反應很好,因此決定花點時間研究一下。volley獲取位址 如果文中所列位址訪問不了,請自行想辦法,你該懂得 git clone volley的使用流程大致是這樣的。首先,我們拿到volley的請求佇...