Android:Glide源码解析
文章平均质量分 71
Glide源码解析
bdmh
多年从事软件开发工作,现在主要从事移动端应用开发
展开
-
Glide:EngineResource
这个队列是用来创建ResourceWeakReference对象的,是对EngineResource的弱引用。EngineResource是一个资源包装器,实现Resource接口,运行资源计数。在ActiveResources中,有对它的引用队列。先来看看EngineResource的属性。原创 2022-11-14 10:18:23 · 333 阅读 · 0 评论 -
Glide:DecodeJob
参阅这个类的作用是,对缓存中数据或者原始资源进行解码、转换等操作,可以理解为一个作业,由EngineJob启动,内部通过相关对象对资源进行处理。先来看一下内部的枚举定义。DecodeJob在Engine中的waitForExistingOrStartNewJob方法中,由DecodeJobFactory创建,并执行DecodeJob的init方法。init方法中会初始化decodeHelper对象。原创 2022-11-09 10:30:06 · 398 阅读 · 0 评论 -
Glide:DecodeHelper
这个过程会传入一堆的参数,如用来加载图像的组件的长和宽,缓存策略,资源对象类型,优先级等等,就不再一一说明了。DecodeHelper是作为解码作业DecodeJob的助手类,用来获取解码相关对象或属性信息的。它的初始化方法init是在DecodeJob的init中调用的。这个类里包含两个枚举类型。原创 2022-10-27 15:03:27 · 348 阅读 · 0 评论 -
Glide:EngineJob
EngineJob这个类是用来通过添加和移除回调,来管理一个load过程,当load完成时,通知回调。EngineJob是在Engine类中,通过EngineJobFactory创建的。参考。先来看看EngineJob中的属性。ResourceCallbacksAndExecutors是一个内部类,管理资源加载的回调和相关线程。实现了Iterable接口。内部有一个List集合。用来保存ResourceCallbackAndExecutor对象(注意这个末尾不带“s”)。原创 2022-10-20 15:31:15 · 515 阅读 · 0 评论 -
Glide:ActiveResources
文章中,我们多次看到了ActiveResources这个对象,我们可以理解为活动的资源,今天就来分析一下ActiveResources的代码。这是一个同步方法,根据key,先从弱引用队列中移除掉该资源,并返回该资源。如果这个资源存在,则执行资源重置。资源监听是被定义在 EngineResource类中,Engine实现了这个接口。ResourceWeakReference 是一个内部类,维护弱引用资源对象。来看activeResources.deactivate。原创 2022-10-14 14:24:25 · 208 阅读 · 0 评论 -
Glide:Engine
这篇文章就来介绍一下Engine 这个类。Engine是负责开始加载和管理活动的以及在缓存中的资源。它实现以下三个接口。分别看一下这这三个接口。原创 2022-10-12 14:31:42 · 209 阅读 · 0 评论 -
Glide:Registry
在上一篇中,我们提到了,通过自定义的Module,可以替换掉Glide默认的组件,比如网络框架,这里就涉及到Registry这个类了。Registry这个类是用来管理Glide中注册的组件的,比如加载、解码、编码等,可以扩展和替换。我们先来看看它里面有些什么。这里只介绍各自负责的功能,具体的代码会陆续讲解。上面这些目前还是比较晦涩的,后面会慢慢展开来讲。Registry对象是在Glide的构造方法中创建的。我们看看Registry的构造方法。原创 2022-10-11 14:17:07 · 158 阅读 · 0 评论 -
Glide:AppGlideModule
上面代码中,getAnnotationGeneratedGlideModules方法就是创建GeneratedAppGlideModuleImpl这个类的,GeneratedAppGlideModuleImpl类自动生成的位置在build目录下。开发人员就可以自己去控制了。那GeneratedAppGlideModuleImpl这个类是什么时候被用到的呢,我们回到Glide.java中,加入我们使用下面代码。加入我也不想用okHttp,我想自己写一个网络请求,让Glide使用可不可以,当然可以。原创 2022-10-10 14:52:10 · 455 阅读 · 0 评论 -
Glide:GlideBuilder
annotationGeneratedModule 是可以通过注解方式,自动创建的,用户可以通过自定义的Module来设置一些选项或者注册自己的组件,比如使用自己的网络组件,这个后面会讲。Builder中的这些设置,我们都可以通过自定义的AppGlideModule子类的applyOptions方法进行设置。从名字看,大家应该不会感到陌生,这是Android中经常会遇到的Builder模式,它为Glide提供了默认的配置。这些过程完成后,就会调用Builder的build方法创建Glide实例了。原创 2022-10-09 14:32:51 · 297 阅读 · 0 评论 -
初始化:Glide.java
该方法,返回RequestManagerRetriever对象,RequestManagerRetriever是一个提供了一些静态方法,用来创建com.bumptech.glide.RequestManager实例,并可以在activity和fragment中检索对应的com.bumptech.glide.RequestManager对象。在Glide内部,定义了一个私有的静态变量glide,看上面的代码就很清楚的看到,Glide内部使用的是单例模式。在get方法中,使用了检测双锁的机制,来创建单例。原创 2022-10-09 14:32:36 · 312 阅读 · 0 评论 -
Glide环境搭建
当然如果我们要对Glide做一些全局的设置,或者替换已有的框架,比如想把网络框架替换为自己的(如okhttp,volley等),这些后面会陆续讲解。上面就是一个最基本的应用,从网络下载一个图像,然后显示到imageView中。使用Glide,需要引入几个包,在gradle文件中引入。有了上面的内容,Glide最常用的功能就可以使用了。Glide.with有很多重载,后面我们会详细说。这些设置在RequestOptions中体现。Glide的gitHub地址。原创 2022-10-09 14:32:16 · 423 阅读 · 0 评论