从上一篇文章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
点击查看应用详情框架