Glide 系列一:序言
序言
- Glide 是目前主流Android 开源框架之一,笔者在此前处理分析了RxJava,OKHttp,Retrofit ;Glide 将作为开源框架收官之作,接下来的精力就在秋招了,祝好!
本文概述
- 本文为Glide 系列第一篇文章,基于Glide 4.11 ,介绍了系列文章思路,Glide 的使用场景,Glide 源码流程,Glide 加载图片时的源码流程。
基本说明:
导入依赖
-
导入最新版本Glide 依赖:app/build.gradle
dependencies { …… //导入最新版本Glide 依赖 implementation'com.github.bumptech.glide:glide:4.11.0' }
系列文章思路
-
关键代码
Glide.with(this).load(URL).into(ImageView)
-
整体分为三个阶段
-
with:空白Fragment 管理声明周期
-
load:构建出RequestBuilder 对象
-
into:
-
第一:运行队列 与 等待队列
- 发起多个Glide 请求,放到不同的队列中
-
第二:活动缓存
-
第三:内存缓存
-
第四:网络模型
-
-
Glide 使用场景一:
-
MainActivity
override fun onCreate(xxx){ …… Glide.with(this).load(URL).into(ImageView) } override fun onDestroy(xxx){ super.onDestroy() Glide.with(this).clear(imageView) }
-
问:使用之后是否需要clear?
- 不必须,Glide 内部存在监听机制,会去监听onDestroy() ,自动clear()
未使用Glide :手动设置生命周期(百度SDK 之前的做法)
-
MainActivity
@Override protected void onStart(){ super.onStart(); xxx.startActionXXX(); } @Override protected void onStop(){ super.onStop(); xxx.stopActionXXX(); } @Override protected void onDestroy(){ super.onDestroy(); xxx.onRelease(); xxx.recycle(); }
-
在Glide 中不需要这样干,全自动的;
Glide 源码流程 :作用域之分
-
根据在主线程/子线程使用Glide ,分为两条流程;
-
在主线程调用:作用域为宿主生命周期
- 会在MainActivity(宿主) 上覆盖一个空白的Fragment ,其作用域为MainActivity(宿主),当MainActivity 发生onStart()、onStop()、onDestroy() 三种生命周期回调方法,紧接着就会触发空白Fragment 的相应的方法,接着会去触发RequestManager 中相关回调 ---> Glide 中的对应的类(执行逻辑 )
- 细节:只有Glide 中三种回调onStart()、onStop()、onDestroy()
-
在子线程调用:其作用域为Application
- 不会创建空白Fragment ,其作用域为Application ,随应用的灭亡而灭亡
-
作用域可看做Glide 的生命周期
-
Glide 是怎么处理图片加载请求:RequestManager
-
基本说明:
- 空白Fragment 相关生命周期方法,会去触发RequestManager;
- RequestManager 进一步处理Glide 中的类(比如图片显示ImageViewTarget )
-
业务场景:加载图片
-
场景描述:当Activity 正在加载服务器的图片,但用户关掉了Activity ;
-
Glide 处理办法:RequestManager 中的onStop() ,停止掉ImageViewTarget
- Activity.onStop() ---> 空白Fragment.onStop() ---> RequestManager.onStop() ---> 停止掉ImageViewTarget
-