Glide执行流程总结
加载图片:
Glide.with(this).load(url).into(imageView);
1.with(this)
参数this,为Activity、Fragment或Context。实际上只有两种类型,即Application类型和非Application类型。传入Application类型,Glide的生命周期与应用程序的生命周期同步,传入非Application类型,当前的Activity销毁时,Glide会清理所有的图片加载请求。
调用RequestManagerRetriever的静态get()方法得到一RequestManagerRetriever对象,这个静态get()方法就是一个单例实现,返回requestManager对象。
2.load(url)
load(url)方法有很多重载的方法,以load(String)为例,返回DrawableTypeRequest对象。
若调用了asBitmap()或asGif(),会返回BitmapTypeRequest或GifTypeRequest。
RequestManager的load()方法中,fromString()方法会返回一个DrawableTypeRequest对象,接下来会调用这个对象的load()方法,把图片的URL地址传进去。
load()方法在RequestManager的父类DrawableRequestBuilder中。
DrawableRequestBuilder中有很多个方法,这些方法其实就是Glide绝大多数的API了,比如说placeholder()方法、error()方法、diskCacheStrategy()方法、override()方法等。
3.into(imageView)
DrawableRequestBuilder的into()方法中只有一句super.into(view),没有其他逻辑,其父类是GenericRequestBuilder。主要看GenericRequestBuilder类中的into()方法。
1)构建Target对象
构建出一个Target对象,Target对象则是用来最终展示图片用的。会根据传入的class参数来构建不同的Target对象,一般是GlideDrawableImageViewTarget对象。
2)构建Request对象
构建出了一个Request对象,一般是GenericRequest,接着开始request。
3)接着获取图片控件的宽高
4)异步解码,添加请求回调,返回Resource对象
构建engineJob对象,它的主要作用就是用来开启线程的,为后面的异步加载图片做准备,然后构建decodeJob对象,用来对图片进行解码。
5) 通过网络请求,获取到inputStream
6)解析处理stream,得到Bitmap,压缩、圆角等处理,返回Resource
7)封装上一步的结果
8)Resource加载完成,Handler发送消息,主线程更新UI,显示图片
Glide执行流程总结相关推荐
- Android图片加载框架最全解析(二),从源码的角度理解Glide的执行流程
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/53939176 本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭 ...
- 从源码的角度理解Glide的执行流程
转自:http://blog.csdn.net/guolin_blog/article/details/53939176 在本系列的上一篇文章中,我们学习了Glide的基本用法,体验了这个图片加载框架 ...
- Glide系列(四) — Glide缓存流程分析
文章目录 一.概述 1.1 背景 1.2 系列文章 二.准备知识 2.1 Glide 的缓存分层结构 2.2 Glide 缓存相关类的关联关系 三.缓存的获取流程 3.1 缓存获取的入口 3.2 内存 ...
- 动态执行流程分析和性能瓶颈分析的利器——gperftools的Cpu Profiler
在<动态执行流程分析和性能瓶颈分析的利器--valgrind的callgrind>中,我们领略了valgrind对流程和性能瓶颈分析的强大能力.本文将介绍拥有相似能力的gperftools ...
- 动态执行流程分析和性能瓶颈分析的利器——valgrind的callgrind
在<内存.性能问题分析的利器--valgrind>一文中我们简单介绍了下valgrind工具集,本文将使用callgrind工具进行动态执行流程分析和性能瓶颈分析.(转载请指明出于brea ...
- 使用Caffe进行手写数字识别执行流程解析
之前在 http://blog.csdn.net/fengbingchun/article/details/50987185 中仿照Caffe中的examples实现对手写数字进行识别,这里详细介绍下 ...
- Caffe中对MNIST执行train操作执行流程解析
之前在 http://blog.csdn.net/fengbingchun/article/details/49849225 中简单介绍过使用Caffe train MNIST的文章,当时只是仿照ca ...
- pip包管理工具-install执行流程简单查看
pip概述 pip是python提供的包管理工具,该工具提供了对python包的查找.下载.安装与卸载等功能的工具,当前是python中比较主流的管理工具. pip下载安装包的概述 pip工具的本质通 ...
- djangorestframework源码分析2:serializer序列化数据的执行流程
djangorestframework源码分析 本文环境python3.5.2,djangorestframework (3.5.1)系列 djangorestframework源码分析-serial ...
最新文章
- nodejs实现微信授权登录
- 查询数据库占用空间大小
- hdu2722 简单最短路,处理好输入就行
- sourceTree 的使用教程
- PAI分布式机器学习平台编程模型演进之路
- 【Python】洛谷 P1175_表达式的转换(逆波兰式、中缀表达式、后缀表达式、栈)
- 用python玩转数据第四周答案_用Python玩转数据_章节答案
- 【UI】android如何绘制一个饼图
- 如何快速实现Mathematica和Mathtype之间的切换
- linux下mysql常用命令_linux 下 mysql 常用命令
- Jupyter notebook 修复
- 【脱壳-寻找OEP】通过堆栈平衡法找到OEP(ESP定律)
- 新版edge找不到internet选项
- QQ发送PDF为什么显示服务器,为什么QQ接收的PDF文件打不开
- 强化学习笔记1:Multi-armed Bandits
- 国内主流云服务器价格概览
- 根号分治 + 入门题目
- TCP的三次握手和四次断开
- 线上引流推广渠道有哪些,哪个效果好,企业应该怎么做?
- 解决rdlc报错 An error occurred during local report processing
热门文章
- Anaconda环境管理
- 经历能让人变得更理智更成熟
- 解决:sql中将日期字符串当做日期类型处理
- dataframe,python,numpy 问题索引1
- list extend 和 append
- LeetCode中等题之简易银行系统
- Ryzen 4000 Vermeer CPU和Radeon RX Big Navi 图形卡
- 激光雷达和毫米波雷达
- SyntaxError: Missing parentheses in call to ‘print‘. Did you mean print(i, colour[i])?
- Android Profiler 抓取接口返回信息,请求头信息等,