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

目录
相关文章
|
缓存 前端开发 JavaScript
浅浅阅读umi中InitialState插件源码 - 杨磊
InitialState插件源码的简要介绍
1037 0
浅浅阅读umi中InitialState插件源码 - 杨磊
|
7月前
|
NoSQL Java 应用服务中间件
关于阅读源码
【1月更文挑战第12天】关于阅读源码
|
JavaScript
vue官网阅读学习笔记整理(第七天)
vue官网阅读学习笔记整理(第七天)
77 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
嗨!大家好,我是小蚂蚁。 有同学问了,有没有视频学习资料呀!俺就喜欢喜欢看视频学呢!这个咱也有。这篇给大家整理一下今年录制的几个视频教程的合集,建议收藏,假期安排时间,好好学习。悄悄的做个游戏,然后惊艳很多人。 强烈建议收藏,另外如果视频对你有帮助的话,欢迎点赞,分享鼓励小蚂蚁继续创作。
102 0
微信小游戏无代码开发视频教程合集3
嗨!大家好,我是小蚂蚁。 昨天给大家整理了一份图文教程的合集资料,有同学问了,有没有视频学习资料呀!俺就喜欢喜欢看视!这个咱也有。这篇给大家整理一下今年录制的几个视频的合集,建议收藏,假期安排时间,好好学习。悄悄的做个游戏,然后惊艳很多人。 这些视频都是免费的,强烈建议收藏,另外如果对你有帮助的话,欢迎点赞,分享鼓励小蚂蚁继续创作。
134 0
|
开发工具
微信小游戏无代码开发视频教程合集1
昨天给大家整理了一份图文的合集资料,有同学问了,有没有视频学习资料呀!俺就喜欢喜欢看视频学呢!这个咱也有。这篇给大家整理一下今年录制的几个视频教程的合集,建议收藏,假期安排时间,好好学习。悄悄的做个游戏,然后惊艳很多人。 强烈建议收藏,另外如果视频对你有帮助的话,欢迎点赞,分享鼓励小蚂蚁继续创作。
136 0
|
缓存 前端开发 JavaScript
浅浅阅读umi中InitialState插件源码
InitialState插件源码的简要介绍
679 1
浅浅阅读umi中InitialState插件源码
|
设计模式 分布式计算 资源调度
如何阅读源码
如何阅读源码
216 0