Volley缓存说明——一个请求两次回调
缓存 一个 说明 请求 回调 两次 Volley
2023-09-27 14:27:19 时间
从上一篇文章Android 异步网络请求框架-Volley了解volley的一些出来过程,当然也包含网络请求和缓存处理的流程,但是在此需要单独做一些说明。
我在使用过程中忽略了一个事情,就是一个网络请求可能会有两次结果回调,其实这个在上一篇文章中也有说明,只是没有特别说明,很容易被忽略。
当进行网络请求时,先会判断缓存,当缓存还未过期,但是需要刷新时,volley会先将缓存回调(第一次),然后以最高优先级再次发起一个网络请求,若请求到的内容有变化时,会再次回调(第二次)。当然,如果请求到的内容没有变化(the
server returned 304),则不会进行第二次回调。因为第一次将缓存回调时已经将请求标记为回调过的:
// 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/43168141
相关文章
- varnish中忽略cookie进行缓存
- 02 架构核心技术之分布式缓存(上)
- 一个可以查看Linux当前缓存了哪些大文件的小工具
- jQuery中ajax的使用与缓存问题的解决方法
- 《JVM系列(3),什么是Redis缓存雪崩、缓存穿透和缓存击穿
- 分布式系统中有哪些缓存?
- Java实现一个简单的缓存方法
- ServletWeb缓存解决问题
- 在Spring Boot中使用数据缓存
- 【Android开源项目分析】android轻量级开源缓存框架——ASimpleCache(ACache)源码分析
- 前端必须要懂的浏览器缓存机制
- 为电子书包配置透明网关+缓存服务器
- H5 和移动端 WebView 缓存机制解析与实战
- Redis-缓存穿透 缓存击穿 缓存雪崩 缓存预热 缓存更新 缓存降级
- 霸气!Nginx 中缓存静态文件秘籍