本地缓存
来源:互联网 发布:宣城太守知不知翻译 编辑:程序博客网 时间:2024/05/02 04:43
1.使用场景
- 1)提高访问服务器接口的速度,测试场景:2G/3G网络环境下,以模拟用户真实体验
- 2)影响因素:双向数据传输速度,
- 3)可行性的措施:减少接口的调用次数 -> 整合多次为一次;措施二,调用一次服务端接口后,在规定地一个时间段内不再调用,保存数据在APP 本地上,也就是缓存时间段内,扔使用上次获取到的数据。
- 4)非实时更新,重复数据,缓解与服务器数据交互的压力,提供一定的离线浏览。
https://github.com/saymagic/PictureThreeCache
http://blog.csdn.net/lnb333666/article/details/8460159
2.设计场景
- 1)缓存时间长短设置,有一个推荐标准:长【5-10分钟】即时性高低,数据更新变动,如产品描述,而产品价格:不缓存。同一个接口,时间参数不同,有所区别。
- 2)请求方式:适合获取数据的get,不适合修改修改数据的post;
- 3)缓存地点:sd卡中,仅限于sd卡的用户中,存放标准/方式:以URL格式作为KEY,存放缓存数据,放在url.xml中,设置缓存时间Expired,每一个接口都配置,post设置为0,意味着不需要缓存
- 4)写一个单利模式的工具服务端类:CacheManager,两边都会有更新,有强迫症的可以由产品经理来设计一个按钮实现强制刷新:把过期时间设置为0
3.图片缓存【基本原理:三级缓
- 1.1.第三层缓存是在手机内存中的本地文件,这种缓存读取速度非常快,但当图片内存被回收时,图片自然就不会存在了,对图像而言,可以用LruCache实现,当ImageView需要url1对应的图片,那么可以从LruCache中返回url1对应Bitmap,如果为null再去本地找。
- 1.2.第二层则是在手机硬盘层,是会缓存到sd卡。
- 1.3.第一级别是网络层,在本地文件缓存中查找,如果找到了就不用去网络中拉取了。如果没有找到,再从网络中获取,并且视情况保存在本地缓存目录下。即根据图片的url地址可以找到服务器上相应图片,会消耗流量。
http://www.trinea.cn/android/android-imagecache/
https://github.com/Trinea/android-common
http://www.trinea.cn/android/android-imagesdcardcache/
4.可参考的缓存策略
- 1)每次拉一个或多个JSON包丢在本地的某个文件里就是了,JSON包里可以包含Time标签,更新就是你手动或自动刷新得来的结果么,也就是拉一次包。
- 2)差量更新:每一条动态都有一个version值,拉的时候把本地version上传给服务器,服务器对比version值,如果不同则下发
- 3)
- 4)数据库缓存:缓存的数据库是存放在/data/data//databases/目录下,是占用内存空间的。个人建议把url作为唯一的标识。下次下载的时候根据url先从数据库中查询,如果查询到当前时间并未过期,就根据路径读取本地文件,从而实现缓存的效果,sqlite ,存储对应的URL ,时间戳 ,内容。
- 5)文件缓存:使用File.lastModified()方法得到文件的最后修改时间,与当前时间判断是否过期,从而实现缓存效果,建立一个文件夹,并且以每个URL对应的hashCode码为文件名,计算超时值时可以直接使用当前时间 - 文件的修改时间。
- 6)图片文件内容是不变的,一般存在SD卡上直到被清理,我们是可以永远读取缓存的。配置文件内容是可能更新的,需要设置一个可接受的缓存时间。
- 7)Android网络缓存:不同环境下的缓存时间标准不一样:
7.1. 无网络环境下,我们只能读取缓存文件,为了应用有东西显示,没有什么过期之说了。
7.2. WiFi网络环境下,缓存时间可以设置短一点,一是网速较快,而是流量不要钱。
7.3.3G流量环境下,缓存时间可以设置长一点,节省流量,就是节省金钱,而且用户体验也更好。
http://blog.csdn.net/erjizi/article/details/50502565
- 1)每次拉一个或多个JSON包丢在本地的某个文件里就是了,JSON包里可以包含Time标签,更新就是你手动或自动刷新得来的结果么,也就是拉一次包。
- 8)硬盘外存缓存:Android DiskLruCache缓存完全解析
http://blog.csdn.net/timmobile/article/details/49887789
参考文档
http://blog.csdn.net/lnb333666/article/details/8460159
https://www.zhihu.com/question/28019694
https://github.com/wyouflf/xUtils
http://www.trinea.cn/android/android-http-cache/
https://github.com/Trinea/android-common
0 0
- 本地缓存
- 本地缓存
- 本地缓存
- 本地缓存
- iOS开发缓存:本地缓存
- ADOQuery 开启本地缓存。。。
- 数据本地缓存方法
- 本地DNS缓存
- HTML5 本地缓存
- Flex 本地缓存
- 更新本地DNS缓存
- .net4.0本地缓存
- ASIHttpRequest 本地缓存
- Android图片本地缓存
- ios 本地缓存
- 如何禁用本地缓存
- Java8-本地缓存
- Java8-本地缓存
- 冒泡排序C语言实现
- 关于URL编码
- HDU~4704~SUM
- [codeforces704B]ant man 解题报告
- Javascrpt密码强度校验函数
- 本地缓存
- 四种常见的 POST 提交数据类型
- vasprintf(3) - Linux man page
- OpenCV加FFmpeg ARM交叉编译
- OpenCL获取文件长度及内容
- iOS - UIWebView加载数据和高度自适应
- JS的一些知识点小结
- 导出csv文件时,处理分隔符问题
- Ftp 协议: