Volley緩存說明——一個請求兩次回調

從上一篇文章Android 異步網絡請求框架-Volley瞭解volley的一些出來過程,固然也包含網絡請求和緩存處理的流程,可是在此須要單獨作一些說明。
我在使用過程當中忽略了一個事情,就是一個網絡請求可能會有兩次結果回調,其實這個在上一篇文章中也有說明,只是沒有特別說明,很容易被忽略。緩存

這裏寫圖片描述
當進行網絡請求時,先會判斷緩存,當緩存還未過時,可是須要刷新時,volley會先將緩存回調(第一次),而後以最高優先級再次發起一個網絡請求,若請求到的內容有變化時,會再次回調(第二次)。固然,若是請求到的內容沒有變化(the server returned 304),則不會進行第二次回調。由於第一次將緩存回調時已經將請求標記爲回調過的:markdown

// If the server returned 304 AND we delivered a response already, // we're done -- don't deliver a second identical response. if (networkResponse.notModified && request.hasHadResponseDelivered()) { request.finish("not-modified"); continue; }

固然,還有一點須要註明一下,若是緩存已通過期了,是不會進行回調的,也就是說過時的緩存等同於緩存不存在。可是,volley在初始化緩存是並無對過時的緩存進行處理,我的以爲這裏能夠進行優化:
在初始化時,將已過時的緩存刪除,好處:
1. 在請求時減少過時緩存的命中率(區別於在初始化以後才過時的緩存);
2. 減少沒必要要的內存和磁盤佔用;
3. 提升緩存的使用率(在進行Lru刪除緩存時,可能會清除了有用的緩存而保留了過時的緩存);網絡


我寫的CSDN博客客戶端介紹:http://blog.csdn.net/brian512/article/details/43168141app

點擊查看應用詳情框架

相關文章
相關標籤/搜索