huangyx 2013-01-29
客户端缓存机制是android应用开发中非常重要的一项工作,使用缓存机制不仅仅可以为用户节省3G流量,同时在用户体验方面也是非常好的选择.
缓存机制分为两部分,一部分是文字缓存,另一部分是多媒体文件缓存.
缓存文件保存策略:
1. 文字缓存:
文字缓存应该分为两种,一种是更新比较频繁的区域,一种是更新不频繁的区域.
根据两者的更新频率区分它们的过期时间.
更新比较频繁的区域,它的缓存过期时间应该为应用程序内(即应用程序从打开到关闭的这段时间).这种情况会有专门的缓存文件夹存放该类缓存文件,以及专门的缓存数据库表存放信息.每次应用程序启动的时候都会先将该类数据清空.
另一种很少更新的区域,它的缓存不设置过期时间,而是提供一个按钮或者Menu可以让用户选择手动更新(如我的好友列表,我的订阅,我的分享.等等….)
(1)通常情况下,我们与服务器交互都是采用JSON格式获取数据的,获取的JSON数据仅仅是一段字符串,我们可以考虑将这些字符串使用文件流写入一个TXT,保存到
SD卡中,在数据库添加该数据的记录.添加数据库记录时,提供两个关键字段,一个是
请求的URL,另一个则是本地保存后的文件地址.日后每次向服务器发起请求之前都会根据URL在数据库中检索.
该方法好处:降低系统数据库数据量,不会出现数据库满了的现象.
缺点:IO操作频繁,有时代码书写有误会造成内存泄露等状况.
(2)将JSON数据解析后装入List<Map>对象中,然后遍历List,将数据统统写入相应的数据库表结构中,以后每次向服务器发起请求之前可以先在数据库中检索,如果有直接返回.
该方法好处:如果本地存在文字缓存,那么读取缓存速度快.
缺点:增加数据库数据量.
2. 多媒体文件缓存
(1) 图片缓存
图片的缓存可以根据当前日期,时间为名字缓存到SD卡中的指定图片缓存目录,
同时数据库中做相应记录,记录办法可以采用两个关键字段控制,一个字段是该图片的URL地址,另一个字段是该图片的本机地址.取图片时根据URL在数据中检索,如果没有则连接服务器下载,下载之后再服务器中作出相应记录.
(2) 视频文件缓存
考虑到视频文件就是动画片,每一集的大小应该超过20MB,如果边播放边下载的话
用户的3G流量负担是很大的,而且用户看完一集动画片,基本上不会再去看第二遍.
从这个状况来看,建议不要对视频文件进行下载缓存.另外也能降低程序员的编码负担.
当然我们可以为一些动漫发烧友提供一个下载动画片的按钮,供他们下载喜欢的动画片,甚至也可以设置如果要下载动画片会付出一些代价等等.
缓存文件删除策略:
1. 每一个模块在每次客户端自动或者用户手动更新的时候删除相应模块的缓存文件,并重新下载新的缓存文件.
2. 在设置界面中提供删除缓存的功能,点击后删除本机所有缓存.
本地客户端与服务器交互流程图如下: