Glide-自定义缓存

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yulyu/article/details/55211250

前言:

在前面的文章中,我们介绍了如何对Glide进行默认配置的基础知识,现在我们就来介绍如何配置自定义缓存

Glide 系列目录

1.如何使用GlideModule

首先我们要对Glide进行默认配置,需要了解如何使用GlideModule,前面文章已经做了详细介绍了,这边就不再介绍了

如何使用GlideModule

http://blog.csdn.net/yulyu/article/details/55194237

前面还介绍了关于Glide缓存的基础知识,有兴趣的也可以看看

Glide缓存基础知识

http://blog.csdn.net/yulyu/article/details/55096713

2.自定义内存缓存

通过调用builder的setXXX方法就可以自定义内存缓存的大小了

(MemoryCach以及BitmapPool都与内存缓存有关)

public class XiayuGlideModule implements GlideModule {

    @Override
    public void applyOptions(Context context, GlideBuilder builder) {
        //配置内存缓存大小 10MB
        builder.setMemoryCache(new LruResourceCache(10*1024*1024));
        //配置图片池大小   20MB
        builder.setBitmapPool(new LruBitmapPool(20*1024*1024));
    }

    @Override
    public void registerComponents(Context context, Glide glide) {

    }
}

但是内存缓存的大小数值其实不应该是随便配置的,Glide的内部的默认值是通过一系列的计算获取的,比如说判断手机是否高配置手机等(有兴趣的可以去看他的源码,或者等待本系列后面的源码分析)
这样有个取巧的办法,就是获取Glide默认的设置,然后在这个设置的基础上进行修改

public class XiayuGlideModule implements GlideModule {

    @Override
    public void applyOptions(Context context, GlideBuilder builder) {
        //获取内存计算器
        MemorySizeCalculator calculator = new MemorySizeCalculator(context);
        //获取Glide默认内存缓存大小
        int                  defaultMemoryCacheSize = calculator.getMemoryCacheSize();
        //获取Glide默认图片池大小
        int                  defaultBitmapPoolSize  = calculator.getBitmapPoolSize();
        //将数值修改为之前的1.1倍
        int                  myMemoryCacheSize  = (int) (1.1 * defaultMemoryCacheSize);
        int                  myBitmapPoolSize   = (int) (1.1 * defaultBitmapPoolSize);
        //修改默认值
        builder.setMemoryCache(new LruResourceCache(myMemoryCacheSize));
        builder.setBitmapPool(new LruBitmapPool(myBitmapPoolSize));
    }

    @Override
    public void registerComponents(Context context, Glide glide) {

    }
}

3.自定义磁盘缓存

磁盘缓存按照访问权限及路径可以分为两种
- 私有缓存 (自己本app可以使用,目录在data/data/应用包名 下面)
- 外部缓存(都可以访问,目录在扩展空间内,如SD卡)


3.1私有缓存

下面这样配置的话,主要是修改缓存大小,缓存路径仍为默认路径(即data/data/应用包名/cache/image_manager_disk_cache)

public class XiayuGlideModule implements GlideModule {

    @Override
    public void applyOptions(Context context, GlideBuilder builder) {
        //设置磁盘缓存大小
        int size = 100 * 1024 * 1024;
        //设置磁盘缓存
        builder.setDiskCache(new InternalCacheDiskCacheFactory(context, size));
    }

    @Override
    public void registerComponents(Context context, Glide glide) {

    }
}

如果需求修改缓存路径的话,需要增加一下参数即可(变为data/data/应用包名/cache/xiayu)

    //设置磁盘缓存大小
    int size = 100 * 1024 * 1024;
    String dir = "xiayu";
    //设置磁盘缓存
    builder.setDiskCache(new InternalCacheDiskCacheFactory(context,dir, size));

3.2外部缓存

下面这样配置的话,缓存会在 SDCard/Android/data/应用包名/cache/image_manager_disk_cache目录下

public class XiayuGlideModule implements GlideModule {

    @Override
    public void applyOptions(Context context, GlideBuilder builder) {
        //设置磁盘缓存大小
        int size = 100 * 1024 * 1024;
        //设置磁盘缓存
        builder.setDiskCache(new ExternalCacheDiskCacheFactory(context, size));
    }

    @Override
    public void registerComponents(Context context, Glide glide) {

    }
}

如果需求修改缓存路径的话,需要增加一下参数即可(变为SDCard/Android/data/应用包名/cache/xiayu)

    //设置磁盘缓存大小
    int size = 100 * 1024 * 1024;
    String dir = "xiayu";
    //设置磁盘缓存
    builder.setDiskCache(new ExternalCacheDiskCacheFactory(context,dir, size));

3.3完全自定义路径

上面两种缓存都是把缓存的父目录定死的,能够改变的只是子目录,Glide还提供了一种方式可以完全自定义缓存目录

(需要注意的是这里的路径是配置的绝对路径,所以如果没有指定在sd卡目录下的话是无法直接看到的)

public class XiayuGlideModule implements GlideModule {

    @Override
    public void applyOptions(Context context, GlideBuilder builder) {
        //设置磁盘缓存大小
        int size = 100 * 1024 * 1024;
        String dirFolder = "xia";
        String dirName = "yu";
        //设置磁盘缓存
        builder.setDiskCache(new DiskLruCacheFactory(dirFolder, size));

        //builder.setDiskCache(new DiskLruCacheFactory(dirFolder, dirName,size));
    }

    @Override
    public void registerComponents(Context context, Glide glide) {

    }
}

热门文章

阅读更多 登录后自动展开
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页