美文网首页
Glide 图片加载库入门2

Glide 图片加载库入门2

作者: jkwen | 来源:发表于2021-07-08 08:01 被阅读0次

    Glide 的目标和优势

    在解剖原理之前,我们先搞清楚 Glide 想要完成一个什么样的效果,以及它的特性表现。这样我们才能知道原理实现的意义。

    Glide 从两方面展示它在加载图片上的性能表现:

    • 图片解码的速度

    • 避免当解码图片时的卡顿现象(也就是能平滑滚动的保证)

    所以 Glide 加载图片的目标不光是为了快,更要丝滑,不能让用户感觉到任何卡顿。为了达到这个效果,Glide 做了以下几个点,

    1. 智能自动化下载采样和缓存技术,最小化存储开销和解码次数。

    2. 积极的重复利用 byte arrays, Bitmaps 这些资源,最小化垃圾回收开销以及堆内存碎片。

    3. 深度关联 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 下手拆解了。

    相关文章

      网友评论

          本文标题:Glide 图片加载库入门2

          本文链接:https://www.haomeiwen.com/subject/xcyzultx.html