Glide 阅读源码解疑-阿里云开发者社区

开发者社区> quincy> 正文

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10013 0
Glide 阅读源码解疑
转载请标明地址 QuincySx: http://www.jianshu.com/p/e8adc9581f69 问题不定时更新,如果你也有问题欢迎在评论区提出 Glide 是如何拓展不同的资源获取器的 在 manifest 文件中 添加 m...
852 0
源码分析 RocketMQ DLedger 多副本之 Leader 选主
本文将按照《RocketMQ 多副本前置篇:初探raft协议》的思路来学习RocketMQ选主逻辑。首先先回顾一下关于Leader的一些思考: 节点状态需要引入3种节点状态:Follower(跟随者)、Candidate(候选者),该状态下的节点会发起投票请求,Leader(主节点)。
2206 0
Kubernetes 1.8 kube-scheduler的源码分析
很长时间没有写文章,一直在啃kubernetes文档,本来立志一定要读完所有的文档。还有它的最佳实践openshift的文档。但目前为止,我并没有读完kubernetes的文档。当前,我们有需求需要客制化kubernetes的调度函数,所以开始研究kube-scheduler的代码。
2430 0
HashSet集合的add()方法的源码
interface Collection { ... } interface Set extends Collection { .
632 0
源码分析Node的Cluster模块
### 从源码分析Node的Cluster模块 前段时间,公司的洋彬哥老哥遇到一个问题,大概就是本机有个node的http服务器,但是每次请求这个服务器的端口返回的数据都报错,一看返回的数据根本不是http的报文格式,然后经过一番排查发现是另外一个服务器同时监听了http服务器的这个端口。这个时候洋彬老哥就很奇怪,为啥我这个端口明明使用了,却还是可以启动呢?这个时候我根据以前看libuv源码
4334 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13812 0
直播系统的顶梁柱:视频直播源码中的礼物功能
我们了解的直播系统功能是十分的实用且丰富的,一般来说,视频直播源码自带的功能有:直播功能、私信功能、邀请奖励、财务管理功能、短视频功能、直播PK功能、多种礼物功能、分享功能、拉黑功能、带货商城功能、家族功能、标签功能、评论功能等等实质性的功能,今天就针对礼物功能来做一下详细的介绍。
111 0
+关注
quincy
从一个小菜鸟飞升大奶牛之路,飞升路上交交朋友
37
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载