自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 资源 (2)
  • 收藏
  • 关注

原创 Glide源码分析(一),基本加载代码流程

下面来看在Glide中最简单的图片加载代码 Glide.with(this) .load("https://p.upyun.com/docs/cloud/demo.jpg") .into(imageView);这应该是相对比较简单的加载图片的代码了,一步步来,看代码其实很讲究耐心,有时候会遇到很多层次的调用链,...

2018-06-12 15:53:32 1825

原创 Glide源码分析(二),基本加载类图介绍

经过前文Glide源码分析(一),基本加载代码流程的分析之后,想必大家还是有点云里雾里,这里我画出了Glide基本加载流程中涉及到的类以及它们之间的关系,帮助大家更好的理解这个过程。 Glide基本加载过程设计到的主类和关系图如下: 1.GlideGlide这个类是使用图片加载库的入口类,诸如很多第三方Sdk,都用到了外观模式,通过设计一个顶层的接口,供用户使用,减少用...

2018-06-12 15:50:56 1056

原创 Glide源码分析(三),Engine加载资源过程

通过前面的分析,我们知道真正去加载数据是在SingleRequest#onSizeReady方法中被触发,这个里面是调用了Engine#load方法,看到这个方法,我们大致可以猜到此时便开始去真正加载数据了,从缓存中读取或者是从网络获取等等。在开始之前,我们先简单了解一下Engine类中涉及到的一些类。 仍然以最简单的load方式为例子 Glide.with(this) ...

2018-06-12 15:48:45 1176

原创 Glide源码分析(四),DecodeJob执行过程

开始本文之前,DecodeJob它实现了Runnable接口,敏感的朋友可能已经意识到,加载代码的入口就在这里,会在一个新的线程中去加载资源。DecodeJob这个类的代码非常多,主要有以下几个重要的点。封装一些从上面传过来的参数信息,不知道是否还有印象,我们的glide大部分信息是通过前面RequestBuilder中得到的。这里,它内部构造了一个DecodeHelper类,封装了大部分的...

2018-06-12 15:45:59 894

原创 Glide源码分析(五),EngineJob与DecodeJob代码详细加载过程

在Glide源码分析(三),Engine加载资源过程文中,我们分析到Engine#load的最后一步,创建好了一对EngineJob和DecodeJob,随之调用EngineJob的start方法,启动加载任务。下面分析整个一个执行过程,文中相关情景下的方法特定调用的结果是还是基于一下这段code,虽然是由特殊入口,并不影响我们理解整个框架,反而是一个很好的突破口,理解代码的思想。示例代码如下:...

2018-06-12 15:43:00 1220 1

原创 Glide源码分析(六),缓存架构、存取命中分析

分析Glide缓存策略,我们还得从之前分析的Engine#load方法入手,这个方法中,展示了缓存读取的一些策略,我们继续贴上这块代码。Engine#loadpublic <R> LoadStatus load( GlideContext glideContext, Object model, Key signature, ...

2018-06-12 15:40:46 953

原创 Glide源码分析(七),总纲思路梳理

对于Glide源码分析,基本已经接近尾声,整体下来,整个Glide工程代码量还是比较大的,涉及的知识点以及设计模式也很多,很值得研究一下,这里我贴上github源码中,关于glide工程的一张简单的引用关系。如下: 这样大家面对这个强大的代码库也就不那么不知所措了,最核心的也就是library库,glide相关的绝大多数都是在这个里面的。上层不过是一些简单的扩展,比如volley与o...

2018-06-12 15:31:12 742

原创 DecodeJob结构

DecodeHelper 将DecodeJob中的部分属性,交由DecodeHelper进行管理和操作,使代码更加清晰。关于详细,参考DecodeHelper类相关方法分析DiskCacheProvider 内部返回了一个DiskCache的对象,具体的默认实现是DiskLruCacheWrapper。关于DiskCache详细结构,可以参考此文DiskCache结构。DeferredE...

2018-06-11 14:27:00 259

原创 DataFetcherGenerator结构

UML如下: DataFetcherGenerator 使用已注册的ModelLoaders{@link com.bumptech.glide.load.model.ModelLoader}和一个模型构造一系列的DataFetchers{@link com.bumptech.glide.load.data.DataFetcher}。FetcherReadyCallback 当...

2018-06-11 14:21:59 358

原创 DecodeHelper类相关方法分析

DecodeHelper类中,调用的方法,涉及到的东西比较多,最主要的是包括管理组件注册以扩展或替换Glide的默认加载,解码和编码逻辑的Registry类。在Glide类的构造方法中,如下: Glide( @NonNull Context context, @NonNull Engine engine, @NonNull MemoryCache mem...

2018-06-11 14:20:26 446

原创 DiskCache结构

UML如下: DiskCache 定义了从磁盘缓存中写入和读取的接口。DiskLruCache 基于文件系统的一个有限空间的缓存,每一个缓存项都有一个字符串的键和一个固定数量的值,每个键必须匹配正则表达式([a-z0-9_-]{1,120})。值可以是字节序列,随机流或者文件。内部也是基于LRU算法,底层由LinkedHashMap实现。Factory DiskCache...

2018-06-11 14:19:05 2622

原创 数据加载DataFetcher与ModelLoader结构

UML如下: glide数据加载模块,基本结构如上图所示,DataFetcher定义了取数据的接口,具体的通过何种方式取数据,网络还是本地,均是由其子类实现,接下来我们介绍DataFetcher的几个子类。ModelLoader是一个工厂接口,用于将任意复杂的数据模型转换为具体数据类型,从而能够使用DataFetcher去获取由该模型表示的资源的数据,具体的ModelLoader实现...

2018-06-11 14:18:03 1791

原创 Resource结构

UML图如下: Resource 一个包装了特定类型的资源接口,并且能够汇集和重用。DrawableResource 包装了Drawable相关的资源,其直接子类有BitmapDrawableResource、GifDrawableResource和NonOwnerDrawableResource。BitmapResource 包装了Bitmap的资源。NonOwned...

2018-06-11 14:16:51 459

原创 MemoryCache结构

UML如下: MemoryCache 定义了在内存中添加和移除资源的接口,还提供了获取当前缓存信息的接口,如缓存最大值以及当前的缓存大小(单位字节)。ResourceRemovedListener 在缓存中,每当有资源被移除,该接口会得到回调。MemoryCacheAdapter 一个简单的实现了MemoryCache的子类,实际工程并不会使用它,目前仅在测试用例中。L...

2018-06-11 14:15:40 1639 1

原创 Key结构

UML如下: Key 唯一标识一些数据的接口。实现必须实现{Object#equals(Object}和{Object#hashCode()}。 通常希望实现将所有在{@link java.lang.Object#equals(Object)}}和{@link Object#hashCode()}}中使用的唯一标识信息添加到给定的{@link java.security.Mess...

2018-06-11 14:14:37 633

原创 Glide源码分析索引

gilde源码分析,所有分析均是基于glide tag 4.7.1的代码。 系列文章如下:Glide源码分析(一),基本加载代码流程 Glide源码分析(二),基本加载类图介绍 Glide源码分析(三),Engine加载资源过程Glide源码分析(四),DecodeJob执行过程Glide源码分析(五),EngineJob与DecodeJob代码详细加载过程G...

2018-06-11 14:12:55 574

原创 Glide源码分析(八),Glide的自定义模块扩展与实践

Generated APIGlide v4使用注解处理器(Annotation Processor)来生成出一个API,在Application模块中可使用该流式API一次性调用到RequestBuilder,RequestOptions和集成库中所有的选项。GeneratedAPI模式的设计出于以下两个目的:集成库可以为Generated API扩展自定义选项。在Applicat...

2018-06-11 14:07:34 1365 1

browser_download流程图

浏览器下载流程时序图,调用流程

2015-06-02

网购系统需求

网购简单需求分析,包含java在web方面的运用,使用开源框架实现

2012-12-09

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除