自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

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

2018-06-12 15:53:32 1805

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

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

2018-06-12 15:50:56 992

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

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

2018-06-12 15:48:45 1161

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

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

2018-06-12 15:45:59 876

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

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

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

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

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

2018-06-12 15:40:46 933

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

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

2018-06-12 15:31:12 727

原创 DecodeJob结构

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

2018-06-11 14:27:00 237

原创 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 344

原创 DecodeHelper类相关方法分析

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

2018-06-11 14:20:26 425

原创 DiskCache结构

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

2018-06-11 14:19:05 2599

原创 数据加载DataFetcher与ModelLoader结构

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

2018-06-11 14:18:03 1764

原创 Resource结构

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

2018-06-11 14:16:51 430

原创 MemoryCache结构

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

2018-06-11 14:15:40 1622 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 617

原创 Glide源码分析索引

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

2018-06-11 14:12:55 560

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

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

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

原创 FirebaseCrash和自定义Thread.UncaughtExceptionHandler的兼容处理

最近在项目中集成了Firebase的crash报告插件,遇到了一个小的问题,由于项目中之前也使用的自定义的Thread.UncaughtExceptionHandler(具体实现是重启了app,并屏蔽掉了系统的应用程序停止的弹框),导致覆盖掉了Firebase这个对异常处理的设置.public interface UncaughtExceptionHandler { /**

2018-01-13 23:38:41 841

原创 Java多线程-生产者和消费者

java 多线程

2017-02-09 17:28:40 303

原创 art虚拟机缓存文件创建patchoat进程的分析

javaVM patchoat art android5.1

2016-12-03 16:03:03 3675

原创 art虚拟机启动过程分析

android art jvm

2016-12-03 16:01:36 3538 1

原创 RXAndroid源码分析(三) map过程

上一篇文章分析了一层结构最简单的事件触发的过程,接下来分析map过程,对于map过程宏观上的认识,借用官网上的一个图

2016-06-06 15:31:13 514

原创 RXAndroid源码分析(二) 简单的例子

RXAndroid源码分析(二) 简单的例子标签(空格分隔): rxandroid rxjavaRxJava: “a library for composing asynchronous and event-based programs using observable sequences for the Java VM” (一个在Java VM上使用可观测的序列来组成异步的、基于事件的程序的库)R

2016-06-06 15:27:59 598

原创 Activitty状态保存onSaveInstanceState和恢复onRestoreInstanceState

标签(空格分隔):Actiivty 状态 保存和恢复

2015-11-03 15:04:17 1326

原创 Volley Session的小结

Volley Session的小结标签(空格分隔): Volley Session

2015-10-30 16:56:42 1192

原创 android系统浏览器下载流程

android browser下载流程标签(空格分隔): android browser download简介当我们用浏览器点开一个下载链接,然后去下载,从宏观上认识,有下载进度的实时更新和界面的跳转。整个过程中,主要涉及到以下过程。浏览器点击下载按钮,浏览器分发下去一个下载请求,跳转界面的同时在DownloadProvider进程中去真正的下载数据以及更新数据库,在界面上监听数据库的变化,去实时更

2015-06-02 14:58:41 4102 2

browser_download流程图

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

2015-06-02

网购系统需求

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

2012-12-09

空空如也

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

TA关注的人

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