美文网首页
Glide学习归纳四 自定义模块

Glide学习归纳四 自定义模块

作者: _Youngjim | 来源:发表于2018-01-25 11:21 被阅读0次

    修改配置

    Glide高度简化带来便利的同时,也支持我们对它的某些配置进行自定义,利于我们开发不同的需求。自定义模块功能可以将更改Glide配置,替换Glide组件等操作独立出来,使得我们能轻松地对Glide的各种配置进行自定义,并且又和Glide的图片加载逻辑没有任何交集,这也是一种低耦合编程方式的体现。
    那么基础用法如下:
    首先需要定义一个我们自己的模块类,并让它实现GlideModule接口

    public class MyGlideModule implements GlideModule {
        @Override
        public void applyOptions(Context context, GlideBuilder builder) {
        }
    
        @Override
        public void registerComponents(Context context, Glide glide) {
        }
    }
    

    可以看到,在MyGlideModule类当中,我们重写了applyOptions()和registerComponents()方法,这两个方法分别就是用来更改Glide和配置以及替换Glide组件的.
    目前Glide还无法识别我们自定义的MyGlideModule,如果想要让它生效,还得在AndroidManifest.xml文件当中加入如下配置才行:

    <application>
    
            <meta-data
                android:name="com.example.glidetest.MyGlideModule"
                android:value="GlideModule" />
    
            ...
    
        </application>
    

    大概的自定义步骤就是这样,那么我们能修改的配置有哪一些呢?

    • setMemoryCache()
      用于配置Glide的内存缓存策略,默认配置是LruResourceCache。

    • setBitmapPool()
      用于配置Glide的Bitmap缓存池,默认配置是LruBitmapPool。

    • setDiskCache()
      用于配置Glide的硬盘缓存策略,默认配置是InternalCacheDiskCacheFactory。

    • setDiskCacheService()
      用于配置Glide读取缓存中图片的异步执行器,默认配置是FifoPriorityThreadPoolExecutor,也就是先入先出原则。

    • setResizeService()
      用于配置Glide读取非缓存中图片的异步执行器,默认配置也是FifoPriorityThreadPoolExecutor。

    • setDecodeFormat()
      用于配置Glide加载图片的解码模式,默认配置是RGB_565。

    其实Glide的这些默认配置都非常科学且合理,使用的缓存算法也都是效率极高的,因此在绝大多数情况下我们并不需要去修改这些默认配置,这也是Glide用法能如此简洁的一个原因。但是我们难免会有自己的需要。
    比如,Glide默认的硬盘缓存策略使用的是InternalCacheDiskCacheFactory,这种缓存会将所有Glide加载的图片都存储到当前应用的私有目录下。这是一种非常安全的做法,但同时这种做法也造成了一些不便,因为私有目录下即使是开发者自己也是无法查看的,如果我想要去验证一下图片到底有没有成功缓存下来,这就有点不太好办了。那么我们可以这么改

    public class MyGlideModule implements GlideModule {
    
     public static final int DISK_CACHE_SIZE = 500 * 1024 * 1024;
    
        @Override
        public void applyOptions(Context context, GlideBuilder builder) {
            builder.setDiskCache(new ExternalCacheDiskCacheFactory(context));
          //或者修改默认硬盘缓存大小
    //builder.setDiskCache(new ExternalCacheDiskCacheFactory(context, DISK_CACHE_SIZE));
        }
    
        @Override
        public void registerComponents(Context context, Glide glide) {
    
        }
    
    }
    

    还比如,我们对Glide的默认加载图片画质不满意的话(默认是RGB_656),也可以修改对ARGB_8888(当然内存开销会更大,oom的发生可能也会变大)

    public class MyGlideModule implements GlideModule {
    
    
    
        @Override
        public void applyOptions(Context context, GlideBuilder builder) {
            builder.setDiskCache(new ExternalCacheDiskCacheFactory(context));
    builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
        }
    
        @Override
        public void registerComponents(Context context, Glide glide) {
    
        }
    
    }
    

    以下都是抄的!!!

    替换组件

    替换Glide组件功能需要在自定义模块的registerComponents()方法中加入具体的替换逻辑。相比于更改Glide配置,替换Glide组件这个功能的难度就明显大了不少。Glide中的组件非常繁多,也非常复杂,但其实大多数情况下并不需要我们去做什么替换。不过,有一个组件却有着比较大的替换需求,那就是Glide的HTTP通讯组件。

    具体做法直接查看http://blog.csdn.net/guolin_blog/article/details/78179422

    相关文章

      网友评论

          本文标题:Glide学习归纳四 自定义模块

          本文链接:https://www.haomeiwen.com/subject/xtzmaxtx.html