Glide学习

本文详细探讨了Glide的设计理念,包括四级缓存策略、Bitmap优化、生命周期管理和自定义加载机制。源码层面解析了RequestManager的构建、网络请求与图片展示过程,并介绍了其使用的单例、建造者和工厂设计模式。特别关注了动画线程池和WebP不支持的细节。
摘要由CSDN通过智能技术生成

文章推荐

我认为对我启发最大的文章是这一篇,这篇主要是讲思想。然后源码上对我启发最大的是这一篇,这是更详细的源码介绍。除了Glide的现成方案之外,还要学习没有第三方框架的时候,Bitmap的优化方案

总体逻辑

1.首先谈设计思想
①缓存:它的四级缓存思路,为什么要有内存缓存,为什么内存缓存是两级,为什么要有磁盘缓存,为什么磁盘缓存是两级。
②加载:参考Bitmap的优化思路,除了Bitmap的:合理分配drawableinSampleSize、图片格式优化之外,还添加了Bitmap缓存池,方便复用。
③除此之外,还能灵活管理生命周期,在页面生命周期结束的时候停止加载(当然前提是传入的ContextActivity)。
④当遇到大图加载的时候,Glide只是负责将图片下载下来,图片的加载由自定义的ImageView来实现。(BitmapRegionDecoder,线上的:SubsamplingScaleImageView
2.然后谈具体源码实现
①with:得到RequestManager,由空Fragment感知生命周期来调用RequestManager相应方法
②load:构建RequestBuilder
③into:创建Request、开启Engine、运行DecodeJob线程、HttpUrlFetcher加载网络数据、回调给载体Target、载体为ImageView设置展示图片。
3.谈它的设计模式
①单例模式,with传入上下文构建RequestManager
①建造者模式,比如RequestBuilder
③工厂模式,创建RequestManager的时候,如果RequestManager为空,则通过抽象工厂来创建RequestManger
4.最后谈一些小点
①图片加载是异步线程,通过handler去更新的ui
②Glide会用到线程池

public final class GlideBuilder {
  ...
  private GlideExecutor sourceExecutor; //加载源文件的线程池,包括网络加载
  private GlideExecutor diskCacheExecutor; //加载硬盘缓存的线程池
  ...
  private GlideExecutor animationExecutor; //动画线程池

③Glide不支持解析webp动图。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值