图片的三级缓存

介绍

本文介绍了三级缓存的原理及操作,并且用策略模式的架子框起来。


1.图片的三级缓存是什么

图片的三级缓存顾名思义就是指三级图片的缓存技术,哦,不对,我在说什么。图片的三级缓存顾名思义就是指在图片加载过程中使用缓存技术,在加载网上的图片时,第一次加载时下载图片然后显示,然后会把图片进行缓存操作,之后如果再次使用这个图片时就不用再次下载了,这样子的话可以节约系统资源,也可以节省用户流量。

那么三级缓存是哪三级呢?

  • 网络缓存:这一步其实就是利用网络去下载图片的操作,严格说不能算“缓存操作”,但是为了名称的统一,大家就叫它网络缓存。
  • 本地缓存:就是说将图片保存在本地SD卡上,使用时直接从SD卡取出就好了。
  • 内存缓存:最麻烦的一步,就是将图片保存在内存中,要知道内存缓存是最快的,但是会占用用户内存,所以需要适当的释放内存,后文有具体描述。

2.流程图来一波

图片从百度拿来的

流程图

我觉得这张图不错,就直接拿来用了,图很好理解,优先从内存中加载,其次是SD卡,内存是最快的,最后才是从网络下载。记得获取到图片以后要相应的存储在缓存中。


3.上代码

代码使用了策略模式封装,如果不了解策略模式的可以去看看本人另一篇关于策略模式的博客。

缓存的抽象父类:

//缓存的抽象类
public abstract class Cache {
   
    abstract Bitmap get(String url) throws IOException;
    abstract void put(String url,Bitmap bitmap);
}

所有的缓存类应当有put和get方法,以便存和取。

文件缓存:


public class FileCache extends Cache {
   

    //文件目录
    private static final String LOCAL_CACHE_PATH = Environment
            .getExternalStorageDirectory().getAbsolutePath() + "/Cache";
    private static final String TAG = "ImageDown";

    @Override
    Bitmap get(String url) {
        try {
            File cacheFile = new File(LOCAL_CACHE_PATH, MD5Encoder.encode(url));

            if (cacheFile.exists()) {
                Bitmap bitmap = BitmapFactory.decodeStream(new FileInputStream(
                        cacheFile));
                Log.e(TAG, "get: 图片来源文件");
                return bitmap;
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    void put(String url, Bitmap bitmap) {
        File dir = new File(LOCAL_CACHE_PATH);
        if (!dir.exists() || !dir.isDirectory()) {
            boolean b = dir.mkdirs();// 创建文件夹
            if (!b){
                Log.e(TAG, "put: 创建文件夹失败");
            }

        }

        
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值