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 的缓存实现具体代码

目录
相关文章
|
7月前
|
分布式计算 图形学 Spark
技术笔记:Unity洛克人移动部分源码
技术笔记:Unity洛克人移动部分源码
47 0
|
8月前
|
NoSQL 安全 数据库
SpringSecurity-从入门到精通-学习完整笔记-附(完整demo源码)来自b站三更草堂老师的视频教程见下方链接
SpringSecurity-从入门到精通-学习完整笔记-附(完整demo源码)来自b站三更草堂老师的视频教程见下方链接
296 0
|
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); 百合
微信小游戏无代码开发视频教程合集2
嗨!大家好,我是小蚂蚁。 有同学问了,有没有视频学习资料呀!俺就喜欢喜欢看视频学呢!这个咱也有。这篇给大家整理一下今年录制的几个视频教程的合集,建议收藏,假期安排时间,好好学习。悄悄的做个游戏,然后惊艳很多人。 强烈建议收藏,另外如果视频对你有帮助的话,欢迎点赞,分享鼓励小蚂蚁继续创作。
109 0
微信小游戏无代码开发视频教程合集3
嗨!大家好,我是小蚂蚁。 昨天给大家整理了一份图文教程的合集资料,有同学问了,有没有视频学习资料呀!俺就喜欢喜欢看视!这个咱也有。这篇给大家整理一下今年录制的几个视频的合集,建议收藏,假期安排时间,好好学习。悄悄的做个游戏,然后惊艳很多人。 这些视频都是免费的,强烈建议收藏,另外如果对你有帮助的话,欢迎点赞,分享鼓励小蚂蚁继续创作。
146 0
|
开发工具
微信小游戏无代码开发视频教程合集1
昨天给大家整理了一份图文的合集资料,有同学问了,有没有视频学习资料呀!俺就喜欢喜欢看视频学呢!这个咱也有。这篇给大家整理一下今年录制的几个视频教程的合集,建议收藏,假期安排时间,好好学习。悄悄的做个游戏,然后惊艳很多人。 强烈建议收藏,另外如果视频对你有帮助的话,欢迎点赞,分享鼓励小蚂蚁继续创作。
141 0
|
安全 Java 数据库
10分钟完成补充个人博客留言设计贴功能
10分钟完成补充个人博客留言设计贴功能
154 0
10分钟完成补充个人博客留言设计贴功能
|
前端开发 JavaScript
基于HTML+CSS+JS的高端3D相册【完整项目源码】
基于HTML+CSS+JS的高端3D相册【完整项目源码】
基于HTML+CSS+JS的高端3D相册【完整项目源码】
|
算法 Java 中间件
阅读优秀项目源码很重要,分享一个读源码的方法,小白都能学会
作为一个程序员,经常需要读一些开源项目的源码。同时呢,读源码对我们也有很多好处: 1.提升自己 2.修复 Bug 3.增加新功能
阅读优秀项目源码很重要,分享一个读源码的方法,小白都能学会
|
设计模式 Java 开发者
7节视频课+源码解析带你看图学代码 | 开发者进阶站
学会简单Java类,你知道它们的定义来源是有实际依据的吗?来看数据表与简单Java类的各种关联关系吧。