图片缓存思路

图片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下的内容。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值