前言
近期研究了一下Glide的图片加载框架,在这里和大家分享一下。由于代码研读有限,难免有错误的地方,了解的童鞋还望指正。学习小组QQ群: 193765960。
本篇是Glide框架及源码解析的第二篇,更多文章敬请关注后续文章。如果这篇文章对大家学习Glide有帮助,还望大家多多转载。
版权归作者所有,如有转发,请注明文章出处:https://xiaodanchen.github.io/archives/
相关文章:
跟着源码学设计:Glide框架及源码解析(一)
跟着源码学设计:Glide框架及源码解析(二)
跟着源码学设计:Glide框架及源码解析(三)
跟着源码学设计:Glide框架及源码解析(四)
跟着源码学设计:Glide框架及源码解析(五)
1. Request管理机制
在上一篇中我们剖析了Glide的生命周期绑定机制,这一篇我们紧接着Glide的处理流程来学习一下Glide的请求管理机制。
我们先来看一下Glide的最简单的使用代码示例:
该段代码十分简洁,但是内部实现的功能却十分的强大,比如:
- request的生命周期管理(如:退出或者隐藏了界面,需求就取消或暂停了)
- viewTarget的生命周期管理
- 资源的复用和释放
- 灵活的配置(request的builder模式)
针对这些问题,后面将会一一展开剖析。
2. request及其生命周期管理
- 通过上一篇的学习,我们知道了Glide内部生命周期接口为LifecycleListener
- RequestManager具有生命周期(实现了LifecycleListener接口)
- request由RequestManager的into()方法族获得
- request的生命周期由RequestManager统一管理
3. Glide请求管理机制类图
RequestManager是如何生成request并管理request队列的?
老规矩,先上图:
如图:
1) RequestManager持有一个RequestTracker对象requestTracker。
2) requestTracker对象维护request的队列集合
3) RequestManager的load()函数用于获取GenericRequestBuilder对象(其实是子类对象)
- load()内部调用loadGeneric()方法,将requestTracker对象引用传递给GenericRequestBuilder类
- load()实际调用GenericRequestBuilder.load()方法完成request的URL设置
4) GenericRequestBuilder的into()方法是实际产生request和消费request的地方。 - GenericRequestBuilder的into(target)方法调用obtainReauest()获取到GenericRequest对象request,request与target相互绑定并被requestTracker维护。
3.1 GenericRequestBuilder的into(target)方法
|
|
3.2 request的生命周期管理
- 根据上文得知,request都被加入到requestTracker中来管理
- requestTracker由RequestManager创建和管理
- RequestManager具有生命周期
3.2.1 RequestManager
下面让我们看看RequestManager在各个生命周期回调里都做了什么
|
|
代码很清楚了吧。细心的同学可能注意到了onTrimMemory(int level)和onLowMemory(),这俩货是系统在资源不足时调用的,说白了就是释放内存,具体怎么搞得,后续文章会专门讲到Glide的内存管理机制(也是精华)
3.2.2 requestTracker
最后让我们看看requestTracker都干啥了吧
|
|
(本篇是Glide框架及源码解析的第二篇,更多文章敬请关注后续文章。版权归作者所有,如有转发,请注明文章出处:原文链接)