glide加载图片很慢_【转】Glide 架构分析

一、Glide整体的生命周期管理

1. Glide 简介

Glide是一个性能优良的第三方网络图片加载框架,在节省内存和快速流畅加载方面具有较好体现。究其内部机制,发现其优良性能得益于以下几点:

  • 与使用环境生命周期相绑定:RequestManagerFragment & SupportRequestManagerFragment
  • 内存的三级缓存池:LruMemoryResources, ActiveResources, BitmapPool
  • 内存复用机制:BitmapPool

更多的关于Glide的介绍网上资料很多,在这里不再赘述,下文中将针对Glide的内部机制展开说明。

1.1 为什么要绑定生命周期(有什么优点)?

  • 可以实现网络请求根据生命周期而暂停、执行、恢复、释放等
  • 可以实现资源比如图片的自动释放
  • 降低了内存的压力
  • 降低了内存泄漏的风险

1.2 绑定原理

  • 原理的知识基础:FragmentManager(简称fm)中的所有fragment(通过fm.add()添加进来)都与fm所处的context生命周期绑定。例如:我们的activity中的fragment的生命周期自动通过activity的fm和activity的生命周期绑定。
  • Glide定义了RequestManagerFragment 和 SupportRequestManagerFragment两种fragment。该两类Fragment不具有任何的界面和其他功能,通过入口传入的context获取到的fm绑定生命周期到context上。
  • Glide内部的生命周期绑定机制进一步通过基于xxxxRequestManagerFragment 的生命周期接口的回调实现。

2. Glide生命周期回调示意图

711a61e949a9d2a282ffa84b695b20f3.png

3. Glide生命周期绑定机制类图

bdf42aab1405f147c3b1db9103accbfb.png

3.1 RequestManagerRetriever(单例模式)

  • 根据context获取fm;
  • 获取xxxxRequestManagerFragment实例
  • 获取RequestManager实例
  • 相互绑定xxxxRequestManagerFragment和RequestManager
xxxxRequestManagerFragment绑定到context生命周期

3.2 xxxxRequestManagerFragment(绑定context的生命周期)

  • 内部绑定一个RequestManager对象;
  • 内部绑定一个ActivityFragmentLifecycle对象
  • 在生命周期的回调中调用ActivityFragmentLifecycle的相应生命周期方法
  • RequestManager通过注册到ActivityFragmentLifecycle的lifecycleListeners集合实现生命周期绑定
private <
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值