Glide
文章平均质量分 93
Zhongyi_Li
这个作者很懒,什么都没留下…
展开
-
Android LruCache和Glide LruCache源码分析
LruCache是实现了LRU算法的数据结构,方便开发者使用。LruCache实例化的时候,需要传入缓存最大值的,这个最大值可以表示缓存元素的个数,也可以表示所以缓存元素的总大小,这个是根据实际业务需求来的,比如缓存Bitmap的话,我们需要关心Bitmap占用内存的大小,而不是有几个Bitmap。Android LruCache和Glide LruCache实现上基本上差不多,细节上有些差异...原创 2020-05-07 15:29:58 · 714 阅读 · 1 评论 -
Glide之源码学习大杂烩
GlideBuilder初始化各种配置信息,实例化一个Glide对象。Glide的with静态方法是入口通过static getRetriever获取RequestManagerRetriever对象 调用RequestManagerRetriever的get获得RequestManager对象返回Glide的getRetriever静态方法通过static get获取...原创 2020-04-22 10:51:18 · 397 阅读 · 0 评论 -
Glide(Android)之Bitmap对象池
对象池,我们知道是存了对象的,将来可以复用,这样避免频繁地创建和回收常用对象,造成内存抖动,降低app的性能。对于普通的对象来说,其本身占用内存很小,同时在放到对象池的时候,会对对象重置的,所以对象池不会关心对象个体的内存大小,只关心对象的数量。基本上有两种实现方案,数组和单链表,Android官方都有实现使用,Pools采用了数组,大小可以自己指定,Message采用了单链表,可以存50个m...原创 2020-03-12 22:03:33 · 1209 阅读 · 0 评论 -
Glide之缓存模块
Glide 源码分析解读-缓存模块-基于最新版Glide 4.9.0Glide 系列-3:Glide 缓存的实现原理(4.8.0)原创 2020-03-11 08:54:17 · 205 阅读 · 0 评论 -
Glide之ActiveResource(一级内存缓存)
ActiveResource是Glide中的一个内存缓存类,这个内存缓存类和LruResourceCache内存缓存类是不一样的。EngineResource只有被正在使用,也就是有对象持有它,它才会被缓存到ActiveResource中,EngineResource中有个acquire变量表示有几个地方持有了这个Resource,如果acquire等于0了,这时才会把EngineResorc...原创 2020-02-27 11:39:56 · 2256 阅读 · 0 评论 -
Glide之EngineJob和EngineResource
EngineJob中的代码不多,整体思路也比较简单。A class that manages a load by adding and removing callbacks for for the load and notifying callbacks when the load completes.EngineJob管理加载,维护着callback的添加和移除,当加载完成时通知维护的所...原创 2020-02-27 10:43:55 · 685 阅读 · 0 评论 -
Glide之LruCache(二级内存缓存)
Glide中的LruCache和Android中的LruCache不太一样,属于简化版本,不过思想是一样的。都是利用了LinkedHashMap accessOrder 等于true时会对内容按照访问的先后顺序排序,会把最近访问的元素放到双链表的尾部这样一个特性实现的。Glide中LruResourceCache继承了LruCache实现了MemoryCache接口,这个内存缓存池的大小是Me...原创 2020-02-26 20:21:51 · 1627 阅读 · 0 评论 -
Glide(Android)之普通对象池
在Glide的设计中应用了大量对象池的概念,我们就来学习一下对象池Android对象池的支持Android中为了方便使用,官方提供了一个工具类Pools,让大家可以方便的实现对象池,这里不对源码详细解释了,大家可以自己看,很简单。简单说一下实现:就是采用一个Object数组(Android 的Message对象池是采用链表实现的),数组大小外部指定,acquire方法获取对象池中一个对象,...原创 2020-02-24 15:47:22 · 609 阅读 · 0 评论 -
Glide之DecodeJob decode、transcode过程和EngineJob回调的处理
DecodeJob从磁盘获取数据后,需要解析decode数据DecodeJob的onDataFetcherReady回调方法接收到磁盘数据,比如ByteBuffer public void onDataFetcherReady(Key sourceKey, Object data, DataFetcher<?> fetcher, DataSource dataS...原创 2020-02-18 19:32:13 · 438 阅读 · 0 评论 -
Glide之线程池使用实战分析
Glide里面的几个线程池Glide 源码解析 之 线程池了解Glide的线程池,先看上面两篇文章,之后我们说一下,在实际的一次请求过程中,线程池是怎么用的?只看最一般默认的流程:一次网络请求,从Engine的load方法开始,其中会获取到EngineJob和DecodeJob实例,engineJob.start(decodeJob)就开始了流程 public synchron...原创 2020-02-07 16:56:16 · 1588 阅读 · 0 评论 -
Glide之DiskLruCache(三级磁盘缓存)
阅读别人优秀的源码,才知道自己之前写的代码都是垃圾呀在Glide里面好多对象都是通过工厂类生成的,DiskCache也是先看GlideBuilder的build方法: @NonNull Glide build(@NonNull Context context) { if (sourceExecutor == null) { sourceExecutor =...原创 2020-02-05 16:07:39 · 1593 阅读 · 0 评论 -
Glide之Registry、EncoderRegistry、Encoder分析
这块内容比较简单,主要是存(注册)和取看一下注册: registry .append(ByteBuffer.class, new ByteBufferEncoder()) .append(InputStream.class, new StreamEncoder(arrayPool))就这两个,ByteBufferEncoder和StreamEnc...原创 2020-02-03 20:43:30 · 551 阅读 · 0 评论 -
Glide之SourceGenerator数据请求和磁盘缓存
先看一下对SourceGenerator的描述:Generates {@link com.bumptech.glide.load.data.DataFetcher DataFetchers} from original source datausing registered {@link com.bumptech.glide.load.model.ModelLoader ModelLoade...原创 2020-02-07 22:06:58 · 433 阅读 · 0 评论 -
Glide 之 Registry、ModelLoaderRegistry、 MultiModelLoaderFactory、 ModelLoader 分析
Registry Manages component registration to extend or replace Glide's default loading, decoding, and encoding logic.它的主要工作是在Glide初始化的时候做的,我们截取一段代码看看首先看看ModelLoader相关的 registry .appen...原创 2020-02-03 12:36:11 · 1203 阅读 · 0 评论