Glide 阅读源码解疑

简介: 转载请标明地址 QuincySx: http://www.jianshu.com/p/e8adc9581f69问题不定时更新,如果你也有问题欢迎在评论区提出Glide 是如何拓展不同的资源获取器的在 manifest 文件中 添加 m...

转载请标明地址 QuincySx: http://www.jianshu.com/p/e8adc9581f69

问题不定时更新,如果你也有问题欢迎在评论区提出

Glide 是如何拓展不同的资源获取器的

  1. 在 manifest 文件中 添加 meta-data 标签、key 为 GlideModule 的路径,value 为 "GlideModule"
  2. 在 RequestManager 的构造方法里 调用了 Glide.get(context) 方法,通过 ManifestParser 根据 meta-data 标签的 value 来获取所有 manifest 中配置的 GlideModule ,然后循环调用GlideModule.registerComponents() 方法,将 ModelLoader 通过 Glide.register() 方法注册到 GenericLoaderFactory 中

当添加几个相同类型的资源获取器时,Glide的选择策略是什么

在 Glide 中维护这一个 GenericLoaderFactory 对象,在 Glide.register() 调用 GenericLoaderFactory.register() 的方法中可以看到他是根据相应资源的 class(此处关于 ModelLoader 的加载可以查看 Glide 的构造方法) 来替换相应的 ModelLoader,也就是 Glide 的策略是如果一个后配置者会替代前者

发现 Glide 中使用网络图片时是调用的 load(String url) 这个方法、那么为什么源码中网络请求 DataFetcher 的类型 GlideUrl.class 他是怎么转换的

  1. 你传入的 String 会在 StreamStringLoader 类的父类中的 StringLoader.getResourceFetcher() 中将 String 转换为 Uri 并调用 StreamUriLoader.getResourceFetcher()
  2. 在 StreamUriLoader.getResourceFetcher() 判断是否是本地资源,如果是本地资源就加载,如果不是本地资源 那就去调用 HttpUrlGlideUrlLoader.getResourceFetcher()(默认的,如果配置过就是其他的 这也就是 GlideUrl.class 类型的加载器)进行网络加载
  3. 在 HttpUrlGlideUrlLoader.getResourceFetcher() 方法中,先判断缓存,然后 new 出 HttpUrlFetcher 返回,在进行网络请求

注释:这几个转换在 Glide 构造里 这些加载类都是用的 Factory 来加载的,在 Factory() 中他默认传递过,类似责任链模式

Glide 的缓存实现具体代码

目录
相关文章
|
6月前
|
NoSQL Java 应用服务中间件
关于阅读源码
【1月更文挑战第12天】关于阅读源码
|
JavaScript 前端开发 Java
Java实现QQ空间相册的漂亮动态代码,新手必学
藤新版 javascript:window.top.space_addItem(23,38542,830,150,0,300,150); 太阳花 javascript:window.top.space_addItem(23,38540,830,150,0,300,150); 矢车菊 javascript:window.top.space_addItem(23,38538,830,150,0,300,150); 康乃馨 javascript:window.top.space_addItem(23,38536,830,150,0,300,150); 百合
|
设计模式 分布式计算 资源调度
如何阅读源码
如何阅读源码
211 0
|
设计模式 JavaScript 前端开发
看文档不如看源码系列热身 - Redux 源码全解析
众所周知,前端轮子太多,大部分同学每次学习新轮子都是学完不用就忘。我最近看一些库,其实这些库的实现都很简单,但是文档往往又很多,甚至还有些文档说的不清不楚,偶尔用到了都要去查文档,细节一点的东西文档又往往无法体现,感觉还不如将看文档的时间用来看源码。这些库的源码往往很精简,看完了既能知道如何使用,还能知其所以然,不亏。所以有了这个系列。
|
前端开发 API 开发工具
基础篇必看,史上最全的iOS开发教程集锦,没有之一
基础篇必看,史上最全的iOS开发教程集锦,没有之一
|
分布式计算 搜索推荐 前端开发
学会阅读源码后,我觉得自己better了
学会阅读源码后,我觉得自己better了
185 0
Glide混淆踩坑日记
Glide混淆后打包出错 出错 在官方混淆代码的基础上再加两行 ##Glide -dontwarn com.bumptech.glide.** -keep class com.
2522 0
|
SQL XML Java
如何快速阅读源码
本文探讨在需要了解一个开源项目时,如何快速的理清开源项目的代码逻辑! 以下是个人认为行之有效的方法: 先「跑起来」 自顶向下拆解 深入细节 延伸改进 本文以Mybatis为例来进行演示! 先“跑起来” 程序界有个老传统,学习新技术时都是从「Hello World」开始的!无论是学习新语言时,打印...
1217 0
|
IDE API 开发工具
关于Android源码的理解以及如何阅读源码
版权声明:本文为sydMobile原创文章,转载请务必注明出处! https://blog.csdn.net/sydMobile/article/details/78468941 文章最早发布于我的微信公众号 Android_De_Home 中,欢迎大家扫描下面二维码关注微信公众获取更多知识内容。
1134 0