关于Glide的理解.

本文深入探讨了Glide图片加载库的特点、性能优化策略,包括通过控制图片大小、设置Bitmap Format以及使用无界面Fragment。还讨论了Glide的缓存策略、GlideModule的作用以及自定义时的注意事项。在实际开发中,文章提到了一些常见问题及解决方案,如图片加载延迟、线程安全问题和ListView复用问题,最后分享了Glide的进阶优化技巧,如暂停/恢复请求、预加载和清除请求。
摘要由CSDN通过智能技术生成

glide图片缓存
glide源码分享

Glide特点.

  • 使用简单

  • 可配置度高,自适应程度高

  • 支持常见图片格式Jpg png gif webp

  • 支持多种数据源网络、本地、资源、Assets 等

  • 高效缓存策略支持Memory和Disk图片缓存 默认Bitmap格式采用RGB_565内存使用至少减少一半

  • 生命周期集成根据Activity/Fragment生命周期自动管理请求

  • 高效处理Bitmap使用Bitmap Pool使Bitmap复用,主动调用recycle回收需要回收的Bitmap,减小系统回收压力

Glide是如何提高加载图片的性能?

通过控制图片大小.
  • .override(200,200)可以设置加载图片大小,但是实际大小不一定是200x200,通过源码分析下:
    在BitmapRequestBuilder中的private Downsampler downsampler = Downsampler.AT_LEAST默认就是设置了尺寸优化,超过最大比例的就会对图片进行等比例缩放,如何缩放见下面;

  • 在Downsampler中的decode方法中,获取的Bitmap大小变成1/sampleSize,倍数通过getSampleSize计算所得,

  • inSampleSize 是 BitmapFactory.Options的属性,应该大家都知道。然后再看看怎么生成.override(200,200),如果没有设置Glide默认是FitCenter,查看FitCenter可以看到图片截取方式。

  • 举个例子:
    加载的图片大小为1080x540,如果使用了.override(200,200)默认缓存一张200x100的图片,也就是默认存储结果RESULT.

通过设置Bitmap Format的图片类型

为了降低内存消耗,Glide默认配置的Bitmap Format 为 RGB_565,修改GlideBuilder's setDecodeFormat设置.

 builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);

为何要使用额外的无界面的Fragment?

根据传入Context的类型有不同的实现,这里以FragmentActivity为例(现在常用的MD样式Activity类AppCompatActivity是FragmentActivity的子类)。方法get(FragmentActivity activity)调用了方法supportFragmentGet(activity, fm),后者返回的对象类型是SupportRequestManagerFragment 。SupportRequestManagerFragment 是一个无界面的Fragment类,起到把请求和Activity生命周期同步的作用。

Glide.with() 不仅仅只是Context还可以是Activity,Fragment等,传入后自动适配,Glide加载图片是会随着Activity,Fragment 的生命周期,具体可以参考LifecycleListener,所以推荐使用Activity,Fragment.

Glide的缓存策略是做的?

通过该方法设置策略.diskCacheStrategy(DiskCacheStrategy.ALL)
DiskCacheStrategy 分别有以下几种选择,ALL缓存原图和截取后的图,NONE 不缓存,SOURCE 只缓存原图,RESULT缓存截取后的图.

因此如果图片需要分享或需要原图的建议缓存ALL,否则只缓存RESULT.

这个核心的GlideModules的作用是什么?

是什么

  • GlideModule是对glide全局配置相关的类.

  • 如可以设置缓存策略.

  • 更多的配置如下
    https://raw.githubusercontent.com/goodbranch/AndroidNote/master/note/glide/glide-GlideBuilder-1.png

  • 可以通过实现GlideModule接口来自定义一个Glide图库,可以通过他改变Glide的行为和基础配置.

在自定义GlideModule时需要注意什么?

要全局的去声明这个类,让 Glide 知道它应该在哪里被加载和使用。Glide 会扫描 AndroidManifest.xml 为 Glide module 的 meta 声明。具体可以查看源码在Glide.get(Context),通过ManifestParser对象获取GlideModule集合.
因此,你必须在 AndroidManifest.xml 的 < application> 标签内去声明这个刚刚创建的 Glide module。

  1. 创建GlideModel

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

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

  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值