Glide缓存机制

字节Android岗面试必问:Glide的缓存机制,金三银四旗开得胜 } if (decodeFormat == null) { decodeFormat = DecodeFormat.DEFAULT; } return new Glide(engine, memoryCache, bitmapPool, context, decodeFormat); } } 这里也就是构建Glide对象的地方了。那么观察第22行,你会发现这里new出了一个LruResourceCache,并把它赋值到了memoryCache这个对象上面... 阅读详情

上一篇文章介绍了Glide的源码解析 的主线流程,这里说下Glide的缓存机制。

缓存机制加载流程

Glide 的缓存层级包括:

活动缓存:存放所有正在访问的图片。

内存缓存(LRU)、磁盘缓存(LRU)、模型model(网络,io)。

Glide的整体缓存流程如下:

  1. 页面加载图片时,先去活动缓存获取。如果有直接加载;
  2. 如果活动缓存没有,则从内存缓存获取。如果有,则把内存缓存中的图片拿到活动缓存,然后再去加载;
  3. 如果内存缓存没有,则去磁盘缓存中获取。如果有,则把磁盘缓存中的图片复制一份到活动缓存中,然后再去加载;
  4. 如果磁盘缓存中没有,则去model中获取。获取到则在磁盘缓存和活动缓存中保存下来,然后再显示;
  5. 如果页面销毁,则将活动缓存中的资源移动到内存缓存中;
  6. 如果进程杀掉,活动缓存和内存缓存属于运行时缓存,再次启动会从磁盘缓存中获取,并复制到活动缓存然后显示;
LRU 机制

遵循原则:最近最少使用

这里简单的提一下,不做深究。

LruCache是使用LinkedHashMap来管理缓存的。

    public LruCache(int maxSize) {
        if (maxSize <= 0) {
            throw new IllegalArgumentException("maxSize <= 0");
        }
        this.maxSize = maxSize;
      // true 访问优先
        this.map = new LinkedHashMap<K, V>(0, 0.75f, true);
    }
  • put

当LruCache调用put的时候,都会判断是否大于maxSize,如果大于就移除最近最少使用的元素。

如果集合中已经有相同的元素,则将旧的移除掉。

总结

Glide的缓存机制采用了活动缓存、内存缓存、磁盘缓存。活动缓存的设计解决了当maxSize比较小而页面图片多不停put时,直接使用内存缓存LRU机制可能出现的使用中而被移除的问题。

等有时间再补一张流程图。

Android Glide 缓存机制及源码 Android学习PDF+架构视频+源码笔记高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料这几块的内容。非常适合近期有面试和想在技术道路上继续精进的朋友。《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取![外链图片转存中…(img-QQ8qeYO9-1712140009354)]既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化! 阅读详情

相关推荐

ADS使用Smith圆图进行阻抗匹配

在处理RF系统的实际应用问题时,总会遇到一些非常困难的工作,对各部分级联电路的不同阻抗进行匹配就是其中之一。一般情况下,需要进行匹配的电路包括天线与低噪声放大器(LNA)之间的匹配、功率放大器输出(RFOUT)与天线之间的匹配、LNA/VCO输出与混频器输入之间的匹配。匹配的目的是为了保证信号或能量有效地从“信号源”传送到“负载”。 阻抗匹配(impedance matching) 信号源内阻与所接传输线的特性阻抗大小相等且相位相同,或传输线的特性阻抗与所接负载阻抗的大小相等且相位相同,分别称为传输线的输

红茶绿茶和奶茶的博客 3万+

glide获取缓存图片的方法

首先使用glide加载网络图片,然后有硬盘缓存,从缓存中获取图片。设置diskCacheStrategy方法的缓存策略为DiskCacheStrategy.ALL或者DiskCacheStrategy.SOURCE 1、Glide.with(mContext).load(url).asBitmap().into(new SimpleTarget() { @Override public void ...

hn_lgc的专栏 8163

uniapp运行钉钉小程序

因项目原因,公司需要在钉钉里面开发小程序。之前用uniapp开发过app,H5,小程序。还真没尝试过钉钉小程序,今天就简单的记录下uniapp运行钉钉小程序中的过程。

YL 2919

Android Glide数据更新及内存缓存、硬盘缓存清理

感恩原创:http://www.cnblogs.com/wxmdevelop/p/6055232.htmlAndroid的Glide在加载图片时候内部默认使用了缓存机制,Glide的缓存机制分为两级,第一级是内存缓存,然后第二级是硬盘缓存。缓存的过程首先是在内存中缓存,然后将加载的图片资源缓存到硬盘,这样就可以在随后的再次加载中使用缓存了,Glide使用缓存时候首先要检查内存这一层级是否缓存了相应的

尽此依报身,同生极乐国。 716

AIGC大模型应用教学平台

该平台采用最新的AI推理加速芯片,提供30Tops算力和32GB存储,能够运行常见的大语言模型如ChatGLM2、Llama2、Baicuan、Mistral等,也可以运行文生图扩散模型Stable Diffusion,提供大模型微调、量化、转换和加速推理服务。在此基础上,平台还提供常见的生成式AI应用,包括AIGC知识抽取增强(RAG)、AIGC绘画、AIGC会话聊天、数字虚拟人等应用,以便学生能够掌握最新的生成式AI模型微调、提示工程和智能体应用技能。

中智讯的博客 1204

LaTex的下载与安装(2024小白+windows系统)

本文主要介绍了Latex的下载与安装,还包括安装过程中遇到的小问题的解决。

m0_53096519的博客 2万+

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

Glide 是一个图片加载库,跟它同类型的库还有 Picasso、Fresco、Universal-Image-Loader 等。基于 Glide 优秀的缓存管理策略和生命周期关联的特点,目前市面上对 Glide 的使用非常广,因此我们有必要深入研究下 Glide 相关的实现原理,便于更好的使用它。

Elson的博客 1982

详解卷积神经网络(CNN)

卷积神经网络(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。

qq_25762497的博客 25万+

安卓开发中Glide的缓存机制

在使用Glide加载图片时,Glide会在一个新的图片请求之前检查再决定是否需要在原始资源数据中取出资源常用算法——算法是一种常用的缓存逐出策略,用于在内存受限的情况下管理缓存。当缓存达到其最大容量时,LRU算法会淘汰,以便为新项腾出空间。

m0_66843126的博客 2049

Aurix TC3xx系列MCU DMA模块配置方法(二)

本文主要基于英飞凌Aurix TC3xx系列MCU,通过EB tresos配置工具,介绍DMA驱动模块的配置方法。

m0_38045338的博客 2850

IEC61850规约客户端软件开发实战(第二章)

本文介绍了基于IEC61850规约的客户端软件开发过程,重点阐述功能界面设计和服务端连接功能的实现。界面采用Qt框架设计,包含功能按钮区、数据模型展示区(使用QTreeWidget)和状态显示区。连接功能通过libiec61850开源库实现,详细说明了连接流程、句柄创建及状态管理的代码实现。测试结果表明系统能正确识别连接状态,并通过界面直观显示。文章为IEC61850规约软件开发提供了实用参考,下期将分享规约模型数据加载的实现过程。

半青年的博客 2855

深入探究Glide的缓存机制

亲自执笔,带你学习Glide缓存的基本用法,源码实现,以及高级技巧。

郭霖 2078

运维颠覆!一文解锁AI赋能运维实战秘籍,效率飙升!

将AI应用于运维工作是一场极具价值的变革,从故障预测与诊断到自动化任务执行,再到资源管理优化,AI都展现出巨大潜力。尽管在实践过程中会面临数据质量、模型复杂性等挑战,但通过合理的技术选型和解决方案,我们能够充分挖掘AI的优势,实现运维工作的高效、智能转型。持续探索和创新AI在运维领域的应用,将为企业的数字化发展提供坚实保障。在科技飞速发展的当下,运维领域正经历着深刻变革,AI的融入成为提升运维效率与质量的关键。本文将深入实战,带你领略AI如何在运维各环节大显身手,让你的运维工作开启智能高效新模式。

探索云原生与智能化驱动下的安全运维新范式。关注DevSecOps、可观测性、AIOps等前沿领域,与您共赴技术前沿。 401

Glide缓存机制及对比

使用弱引用缓存,存储当前正在使用的图片,避免被LruCache回收,导致空指针异常;当图片不再显示(不被imageview强引用引用)时,用过弱引用+引用队列把这个不再显示的对象放入lrucache中。Q:为什么使用弱引用缓存,而不是用强引用和软引用?A:强引用页面关闭后图片仍被强引用使用,内存泄漏;无法被LruCache管理导致缓存体系失效。软引用直到OOM边缘才进行回收,低端设备频繁GC卡顿。**2、内存缓存(LruCache):**存储最近使用但未被引用的图片。(默认占App内存的1/8)

y515278178的博客 1148

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Glide 缓存机制

Glide缓存分为 内存缓存 和 硬盘缓存。 这两个缓存模块的作用各不相同,内存缓存 的主要作用是防止应用重复将图片数据读取到内存当中,而 硬盘缓存 的主要作用是防止应用重复从网络或其他地方重复下载和读取数据。 缓存key 那么Glide的缓存Key是怎么生成的呢?我不得不说,Glide的缓存Key生成规则非常繁琐,决定缓存Key的参数竟然有10个之多。不过繁琐归繁琐,至少逻辑还是比较简单的,...

jiang19921002的博客 7975

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Android-Glide缓存机制

Glide的缓存机制是非常经典的,它有许多值得我们在项目中去借鉴的地方。它主要分为了活动缓存,内存缓存,磁盘缓存这三个缓存,也叫三级缓存。

袁震的博客 2061

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Android Glide 缓存机制及源码全解

Glide 会在开始一个新的图片请求之前检查以下多级的缓存: 活动资源 (Active Resources) - 现在是否有另一个 View 正在展示这张图片? 内存缓存 (Memory cache) - 该图片是否最近被加载过并仍存在于内存中? 资源类型(Resource) - 该图片是否之前曾被解码、转换并写入过磁盘缓存? 数据来源 (Data) - 构建这个图片的资源是否之前曾被写入过文件缓存?

帅次的博客 3316

Glide缓存机制源码浅析

Glide缓存机制源码浅析内容概览 流行的图片加载框架 常见的缓存策略 LruCache Glide源码分析缓存机制 核心内容 目前流行的专注于图片加载的框架:Picasso\Fresco\Volley(Imageloader)\Glide,无论什么框架大体的思想都是类似的,首次读取从网络加载存到本地(一级、二级、三级、、、缓存),再次读取从本地读取(一级、二级、三级…缓存),最终两者都可以合并成第

DennisJu的专栏 6597

Android Glide 缓存机制及源码全解_android glide lru

因为内存缓存使用LRU算法,当你使用Gilde加载并显示第一张图片时,后面又加载了很多图片,同时你的第一张图片还在用。LruCache的核心思想很好理解,就是要维护一个缓存对象列表,其中对象列表的排列方式是按照访问顺序实现的,即一直没访问的对象,将放在队尾,即将被淘汰。LRU是近期最少使用的算法(缓存淘汰算法),它的核心思想是当缓存满时,会优先淘汰那些近期最少使用的缓存对象。Glide 主要将缓存分为两块内存缓存和硬盘缓存,两种缓存的结合,构成了 Glide 缓存机制的核心。咱继续往下走,顺着源码跑。

2401_87287188的博客 912

RecyclerView与Glide的缓存机制

RecyclerView的item加载流程: 1、界面需要填充布局,将需求交给**回收池** 2、如果回收池没有对应的缓存布局,那么界面就会去找适配器,适配器执行**onCreateViewHolder**方法返回一个ViewHolder对象,然后拿到一个view,把它填充到界面上。(对于第一屏来说,每个item都要执行onCreatteViewHolder) 3、第一屏完成填充后,上滑屏幕,屏幕底部就会出现空缺,这时就会触发加载机制 4、仍然会从回收池中找,然后找到了对应的view,适配器就执行o

yang553566463的博客 2361
上一篇: Glide源码解析
下一篇: Android 注解和反射实践
coder_yao
博客等级 码龄10年 9粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值