本文主要分析以下几点
- 为什么使用三级缓存
- 什么是三级缓存
- 三级缓存原理
- 代码的具体实现:有注释
- 工具类使用方法
- github分享地址
1、为什么使用三级缓存
- 如今的 Android App 经常会需要网络交互,通过网络获取图片是再正常不过的事了
- 假如每次启动的时候都从网络拉取图片的话,势必会消耗很多流量。在当前的状况下,对于非wifi用户来说,流量还是很贵的,一个很耗流量的应用,其用户数量级肯定要受到影响
- 特别是,当我们想要重复浏览一些图片时,如果每一次浏览都需要通过网络获取,流量的浪费可想而知
- 因此提出三级缓存策略,通过网络、本地、内存三级缓存图片,来减少不必要的网络交互,避免浪费流量
2、什么是三级缓存
- 网络缓存, 不优先加载, 速度慢,浪费流量
- 本地缓存, 次优先加载, 速度快
- 内存缓存, 优先加载, 速度最快
3、三级缓存原理
- 首次加载 Android App 时,肯定要通过网络交互来获取图片,之后我们可以将图片保存至本地SD卡和内存中
- 之后运行 App 时,优先访问内存中的图片缓存,若内存中没有,则加载本地SD卡中的图片
- 总之,只在初次访问新内容时,才通过网络获取图片资源
4、代码的具体实现:有注释
/**
* 图片加载工具类(三级缓存)
* <p>
* 注意:
* 1.首次加载 Android App 时,肯定要通过网络交互来获取图片,之后我们可以将图片保存至本地SD卡和内存中
* 2.之后运行 App 时,优先访问内存中的图片缓存,若内存中没有,则加载本地SD卡中的图片
* 3.总之,只在初次访问新内容时,才通过网络获取图片资源
* Created by zxp on 2016/6/17.
*/
public class ImageLoaderUtils {
private static volatile ImageLoaderUtils imageLoaderUtils;
private MenoryCacheUtils menoryCacheUtils;
private LocalCacheUtils localCacheUtils;
private NetBitmapUtils netBitmapUtils;
public static ImageLoaderUtils getInstance() {
if (null == imageLoaderUtils) {
synchronized (ImageLoaderUtils.class) {
if (null == imageLoaderUtils) {
imageLoaderUtils = new ImageLoaderUtils();
}
}
}
return imageLoaderUtils;
}
/**
* 加载图片
*
* @param imageView 图片视图
* @param url 图片地址
*/
public void setImageViewFromBitmap(ImageView imageView, String url) {
setImageViewFromBitmap(imageView, url, NetBitmapUtils.BITMAP_INSAMPLESIZE_ONE);
}
/**
* 加载图片
*
* @param imageView 图片视图
* @param url 图片地址
* @param compressNumber 压缩倍率
*/
public void setImageViewFromBitmap(ImageView