加载图片:

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执行流程总结相关推荐

  1. Android图片加载框架最全解析(二),从源码的角度理解Glide的执行流程

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/53939176 本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭 ...

  2. 从源码的角度理解Glide的执行流程

    转自:http://blog.csdn.net/guolin_blog/article/details/53939176 在本系列的上一篇文章中,我们学习了Glide的基本用法,体验了这个图片加载框架 ...

  3. Glide系列(四) — Glide缓存流程分析

    文章目录 一.概述 1.1 背景 1.2 系列文章 二.准备知识 2.1 Glide 的缓存分层结构 2.2 Glide 缓存相关类的关联关系 三.缓存的获取流程 3.1 缓存获取的入口 3.2 内存 ...

  4. 动态执行流程分析和性能瓶颈分析的利器——gperftools的Cpu Profiler

    在<动态执行流程分析和性能瓶颈分析的利器--valgrind的callgrind>中,我们领略了valgrind对流程和性能瓶颈分析的强大能力.本文将介绍拥有相似能力的gperftools ...

  5. 动态执行流程分析和性能瓶颈分析的利器——valgrind的callgrind

    在<内存.性能问题分析的利器--valgrind>一文中我们简单介绍了下valgrind工具集,本文将使用callgrind工具进行动态执行流程分析和性能瓶颈分析.(转载请指明出于brea ...

  6. 使用Caffe进行手写数字识别执行流程解析

    之前在 http://blog.csdn.net/fengbingchun/article/details/50987185 中仿照Caffe中的examples实现对手写数字进行识别,这里详细介绍下 ...

  7. Caffe中对MNIST执行train操作执行流程解析

    之前在 http://blog.csdn.net/fengbingchun/article/details/49849225 中简单介绍过使用Caffe train MNIST的文章,当时只是仿照ca ...

  8. pip包管理工具-install执行流程简单查看

    pip概述 pip是python提供的包管理工具,该工具提供了对python包的查找.下载.安装与卸载等功能的工具,当前是python中比较主流的管理工具. pip下载安装包的概述 pip工具的本质通 ...

  9. djangorestframework源码分析2:serializer序列化数据的执行流程

    djangorestframework源码分析 本文环境python3.5.2,djangorestframework (3.5.1)系列 djangorestframework源码分析-serial ...

最新文章

  1. nodejs实现微信授权登录
  2. 查询数据库占用空间大小
  3. hdu2722 简单最短路,处理好输入就行
  4. sourceTree 的使用教程
  5. PAI分布式机器学习平台编程模型演进之路
  6. 【Python】洛谷 P1175_表达式的转换(逆波兰式、中缀表达式、后缀表达式、栈)
  7. 用python玩转数据第四周答案_用Python玩转数据_章节答案
  8. 【UI】android如何绘制一个饼图
  9. 如何快速实现Mathematica和Mathtype之间的切换
  10. linux下mysql常用命令_linux 下 mysql 常用命令
  11. Jupyter notebook 修复
  12. 【脱壳-寻找OEP】通过堆栈平衡法找到OEP(ESP定律)
  13. 新版edge找不到internet选项
  14. QQ发送PDF为什么显示服务器,为什么QQ接收的PDF文件打不开
  15. 强化学习笔记1:Multi-armed Bandits
  16. 国内主流云服务器价格概览
  17. 根号分治 + 入门题目
  18. TCP的三次握手和四次断开
  19. 线上引流推广渠道有哪些,哪个效果好,企业应该怎么做?
  20. 解决rdlc报错 An error occurred during local report processing

热门文章

  1. Anaconda环境管理
  2. 经历能让人变得更理智更成熟
  3. 解决:sql中将日期字符串当做日期类型处理
  4. dataframe,python,numpy 问题索引1
  5. list extend 和 append
  6. LeetCode中等题之简易银行系统
  7. Ryzen 4000 Vermeer CPU和Radeon RX Big Navi 图形卡
  8. 激光雷达和毫米波雷达
  9. SyntaxError: Missing parentheses in call to ‘print‘. Did you mean print(i, colour[i])?
  10. Android Profiler 抓取接口返回信息,请求头信息等,