现在的位置: 首页 > 综合 > 正文

图片缓存思路

2013年11月05日 ⁄ 综合 ⁄ 共 1098字 ⁄ 字号 评论关闭

图片API请求之间加上一层判断,如果能找到本地图片就不从网络上下载。

www.baidu.com/a.jpg hash之后变成 a3232313fjkjffafadfjajfkajf
存储到本地 a3232313fjkjffafadfjajfkajf.jpg 以后再根据这个url地址取看看能否命中

获取到一个json里边 timestap:20120504

然后 还有个url www.baidu.com/a.jpg
然后如果这个图片发生了改变
即使url地址没有改变
那么如果你的hash函数是 f(timestamp,image_url)
这个时候出来的就可能不是 a3232313fjkjffafadfjajfkajf ,如果没有找到图片,就从网络下载,并定期删除过期图片。
 
 
图片缓存:LRU机制 (LRU是Least Recently Used最近最少使用算法。内存管理的一种算法,对于在内存中但最近又不用的数据块(内存块)叫做LRU,Oracle会根据那些数据属于LRU而将其移出内存而腾出空间来加载另外的数据。)
这是两种做法,还有一些应用在下载的时候使用了线程池和消息队列MQ,对于图片下载的效率要更好一些。
 
 
图片缓存一般分为内存缓存和外存缓存。内存 缓存运用java的缓存机制,在程序完全退出后,缓存所在的内存空间可能被其它应用程序占用从而丢失。外存缓存一般放在程序特有的访问空间或者sd卡中,
在sd卡中存放的资源为公有资源,其它程序也可以访问,且对用户来讲没有一个强制清除缓存的规范机制。
本文提供三种缓存策略:(1)LRU算法,固定缓存图片数量(max_num),当图片数量超出max_num时,将缓存中最近用的最少的图片删除。 (2)FTU算法,固定每张图片的缓存时限,以最后一次使用算起,超过时限后删除。(3)FMU算法,在存储器中固定一定大小的存储空间,超过固定空间后
将缓存中占用最大尺寸的图片删除。使用时只需要向方法体中传递图片的URL即可。

不能让所有图片资源都放到内存中去(虽然这样加载会比较快)因为图片资源往往会占用很大的内存空间,容易导致OOM
有不少应用将图片缓存到放到SD卡中,采用上述三种算法。


Android 系统为每个新设计的程序提供了/assets目录,这个目录保存的文件可以打包在程序里。/res 和/assets的不同点是,android不为/assets下的文件生成ID。如果使用/assets下的文件,需要指定文件的路径和文件名。下面这个例子,显示如何访问/assets下的内容。

抱歉!评论已关闭.