Glide-自定义缓存

来源:互联网 发布:爱上学软件下载 编辑:程序博客网 时间:2024/05/01 15:13

前言:

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

Glide 系列目录

  • 1.Glide-入门教程
  • 2.Glide-占位图以及加载动画
  • 3.Glide-加载本地图片
  • 4.Glide-加载Gif
  • 5.Glide-绑定生命周期
  • 6.Glide-内存缓存与磁盘缓存
  • 7.Glide-通过Modules定制Glide
  • 8.Glide-自定义缓存
  • 9.Glide-图片的压缩
  • 10.Glide-图片预处理(圆角,高斯模糊等)
  • 11.Glide-图片的剪裁(ScaleType)
  • 12.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) {    }}

热门文章

  • Okhttputils终极封装
  • FaceBook推出的调试神器
  • Android代码优化超级工具
4 0
原创粉丝点击