Android图片中的三级缓存
为什么要使用三级缓存
- 如今的 Android App 经常会需要网络交互,通过网络获取图片是再正常不过的事了
- 假如每次启动的时候都从网络拉取图片的话,势必会消耗很多流量。在当前的状况下,对于非wifi用户来说,流量还是很贵的,一个很耗流量的应用,其用户数量级肯定要受到影响
- 特别是,当我们想要重复浏览一些图片时,如果每一次浏览都需要通过网络获取,流量的浪费可想而知
- 所以提出三级缓存策略,通过网络、本地、内存三级缓存图片,来减少不必要的网络交互,避免浪费流量
什么是三级缓存
- 网络加载,不优先加载,速度慢,浪费流量
- 本地缓存,次优先加载,速度快
- 内存缓存,优先加载,速度最快
三级缓存原理
- 首次加载 Android App 时,肯定要通过网络交互来获取图片,之后我们可以将图片保存至本地SD卡和内存中
- 之后运行 App 时,优先访问内存中的图片缓存,若内存中没有,则加载本地SD卡中的图片
- 总之,只在初次访问新内容时,才通过网络获取图片资源
内存 缓存的时候 回出现内存溢出的情况,使用软引用,来处理,2.3以后不好用了
java语言提供了另一种机制:软引用 ,弱应用,虚拟引用
- 虚拟机内存不足的时候,会回收软引用类型,
- 当内存溢出的时候用
- 弱引用:当对象没有应用的时候马上回收
- 虚拟引用:任何情况下,都可能回收
- java默认的数据类型是强引用
LruCache 现在的用这个解决内存缓存的LruCache
LruCache
facebook 的图片加载框架, 使用的是linux –内核中的匿名共享内存,避免出现三级缓存,内粗缓存,内存溢出的状况