码迷,mamicode.com
首页 > 其他好文 > 详细

Glide 魔法般的自定义扩展

时间:2016-12-29 14:29:12      阅读:283      评论:0      收藏:0      [点我收藏+]

标签:lru   path   map   生命周期   roi   source   one   default   rect   

      使用过Glide的朋友都明白,简单的用法就是:

Glide.with(context)
    .load("http://inthecheesefactory.com/uploads/source/glidepicasso/cover.jpg")
    .into(ivImg);

      而Picasso看起来像是Glide的“兄弟”一样,但Glide的with中提供了多种传递形式,如activity和Fragment,这样设计的目无非是想跟随宿主的生命周期来做事儿。

而且从夹在图片的参数上看默认加载为RGB_565图片,从查找的资料显示RGB_565与ARGB_8888图片相比,在比较普通的手机上肉眼似乎不能区分。

自然RGB_565质量相比较差,运行时占据的内存也是差了不少,这可就是我们的重点啦,有效的减缓了oom机会!如果你仍要使用高质量的图片,那么Glide确实提供了GlideModule方式自定义设置,

在清单文件application中插入meat-data即可:

<meta-data android:name="com.inthecheesefactory.lab.glidepicasso.GlideConfiguration" android:value="GlideModule"/>

 重写GlideModule:

 @Override
    public void applyOptions(Context context, GlideBuilder builder) {//既然拿到了GlideBuilder我们就应该可以做很多事儿啦! 
//DecodeFormat.PREFER_ARGB_8888 //DecodeFormat.PREFER_RGB_565  builder.setDecodeFormat(。。。); } @Override public void registerComponents(Context context, Glide glide) { }

 没错既然重写了GlideModule,并且拿到了GlideBuilder,如果到此为止的话那自定义的Glide就显得太过于Low啦!

除了上面代码中设置了图片的质量参数外,重头戏就在于这两个方法:

builder.setMemoryCache( new LruResourceCache( customMemoryCacheSize );
builder.setBitmapPool( new LruBitmapPool( customBitmapPoolSize );//关于Lru可以自己了解

 现在可以望文生义,就是用来设置Glide要占用RAM的一个缓存阀值额度。

 方式可选如下:

 1)完全自定义标准

 int maxMemory = (int) Runtime.getRuntime().maxMemory();//获取系统分配给应用的总内存大小
 int memoryCacheSize = maxMemory / 6;//设置图片内存缓存占用整个app的比例

 2)按照Glide默认标准,可以自己在做调整

MemorySizeCalculator calculator = new MemorySizeCalculator(context);
int defaultMSize = calculator.getMemoryCacheSize();  
int defaultBPoolSize = calculator.getBitmapPoolSize();

 在持久化缓存方面Glide也是提供了相当ok的api:

builder.setDiskCache(new InternalCacheDiskCacheFactory(context,xxxxxx));
    //使用内部存储和外部存储做缓存时只能二选一
builder.setDiskCache(new ExternalCacheDiskCacheFactory(context,xxxxxx));    

 而且也可以使用DiskLruCacheFactory制定外部路径:

builder.setDiskCache(new DiskLruCacheFactory( Environment.getDownloadCacheDirectory().getPath(), xxxxx));

 如果确定这么做对你有用,那就试试吧!

Glide 魔法般的自定义扩展

标签:lru   path   map   生命周期   roi   source   one   default   rect   

原文地址:http://www.cnblogs.com/zzq-include/p/6232480.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!