Glide 的目标和优势
在解剖原理之前,我们先搞清楚 Glide 想要完成一个什么样的效果,以及它的特性表现。这样我们才能知道原理实现的意义。
Glide 从两方面展示它在加载图片上的性能表现:
-
图片解码的速度
-
避免当解码图片时的卡顿现象(也就是能平滑滚动的保证)
所以 Glide 加载图片的目标不光是为了快,更要丝滑,不能让用户感觉到任何卡顿。为了达到这个效果,Glide 做了以下几个点,
-
智能自动化下载采样和缓存技术,最小化存储开销和解码次数。
-
积极的重复利用 byte arrays, Bitmaps 这些资源,最小化垃圾回收开销以及堆内存碎片。
-
深度关联 Android 组件的生命周期,会优先加载用户能看到的页面(即处理 active 状态的页面)上的图片,其他页面,例如执行 onPause,onStop 的可能就不会加载或者推迟,这个有待后面看源码了解。
这几点说白了,关键点在于减少资源开销浪费,缓存复用,以及结合 Android 组件生命周期对图片加载的控制。
集成 Glide
了解了 Glide 的目标及技术实现方向,再了解下 Glide 集成,
代码集成可以参照官方文档 Download & Setup 重点主要在于 Glide 4.x 及以前版本的区别。
Glide v4 引入了 APT 机制,这使得开发者可以利用注解去自定义一些功能,并通过编译生成代码,结果就是开发者在使用自定义功能时就像是在使用 Glide 原生方法一样。
如果想要使用 Glide v4 这个特性就要去实现 AppGlideModule,
@GlideModule
public final class MyAppGlideModule extends AppGlideModule {}
因为用到注解,所以特别要注意,像 Glide,ARouter 这种写完注解后,都要编译工程才能再写代码去调用,不然有可能就调用不到。
GlideApp.with(this)
.load(imgUrl)
.into(imageView);
//原先以 Glide 打头的调用方式就换成了 GlideApp
之前用 Glide 也是照着文档继承,其实对这块不太理解。比如为什么要定义一个类,继承 AppGlideModule?原先 Glide 的调用怎么就变成了 GlideApp?到底这么做有什么意义?
借此机会我也是重读了文档,原来这一切都是为了更好的扩展 Glide,通过注解可以对图片加载请求做一些配置项扩展,具体的表现提现在 @GlideExtension 注解上,
@GlideExtension 用在类定义上,表明要对 Glide 做功能扩展,之后会用 @GlideOption 和 @GlideType 注解进行具体功能方法的定义。具体使用等后面源码分析再细说,这里先知道个概念。
有了这些了解之后,接下去就准备要开始对 Glide 下手拆解了。
网友评论