Glide源码分析之流程分析

未分析完

csdn草稿不发布关机会消失,但还会在移动版存在,而且不可继续编辑,所以草稿先发布,后期补充。

执行代码:
	Glide.with(this)
                .load(R.drawable.ic_launcher)
                .into(iv);
流程分析:
通过manifest和生成的文件
registerComponentCallbacks
返回RequestManager
load方法
执行的都是父类方法
克隆自身
什么都没配置
begin加载默认图片
开始
单例模式初始化Glide
验证自定义模块
配置RequestManagerFactory
将glide添加到上下文
初始化完毕
初始化RequestBuilder
初始化请求配置RequestOptions
返回RequestBuilder
判断是不是主线程
设置ScaleType
初始化ViewTarget
DrawableImageViewTarget
配置mainRequest
返回SingleRequest
onLoadStarted
  • GlideBuilder包含: new Engine() Glide对象
  • RequestManager包含: Glide对象 Context对象 TargetTracker对象

单例Glide过程:

  1. 资源执行器sourceExecutor:一个根据计算机可用核心数创建的不高于4个线程容量的线程池
  2. 磁盘缓存执行器diskCacheExecutor:一个固定一个线程容量的线程池。
  3. 动画执行器animationExecutor:根据计算机可用核心数创建的线程池,如果可用核心数大于4,则容量为2,否则为1。
  4. 记忆大小计算器memorySizeCalculator:
    a. arrayPoolSize:高内存设备4M,低内存设备2M
    b. maxSize:根据Android应用的基本内存和设备内存高低计算出来的最大内存
    c. 屏幕的宽高信息,最大的bigmap缓存targetBitmapPoolSize,最大内存缓存targetMemoryCacheSize
    d. 可用内存availableSize = maxSize - arrayPoolSize,如果bigmap缓存和内存缓存占用之和大于可用内存,则按照比例分配最高内存
  5. 连接监视器工厂connectivityMonitorFactory:
  6. 图片缓存池BitmapPool:如果memorySizeCalculator中targetBitmapPoolSize有值,创建LruBitmapPool,否则创建BitmapPoolAdapter。
  7. 文件置换固定大小的数组池arrayPool。
  8. 缓存资源的Lru内存缓存memoryCache。
  9. 管理DiskLruCache的o工厂类diskCacheFactory。
  10. 负责启动加载和管理活动和缓存资源的发动机engine
  11. 加载图像时监听请求状态的类的集合defaultRequestListeners。
  12. 用于创建新的RequestManager或从activity和fragment中检索现有方法的的静态方法集合requestManagerRetriever。
  13. 创建Glide对象
  14. 返回RequestManager对象,用于管理和启动Glide请求。
    a. 如果不在主线程,单例模式创建RequestManager绑定新创建的ApplicationLifecycle
    b. 如果在主线程,单例模式创建RequestManager
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值