首页 > 其他分享 >图片加载框架:Glide实现原理

图片加载框架:Glide实现原理

时间:2023-09-05 12:46:24浏览次数:27  
标签:Engine 缓存 Glide 框架 Request 加载 图片

Glide图片加载框架的实现原理是基于三个主要组件:RequestManager、Request和Engine。

RequestManager是Glide的入口类,负责管理和协调图片加载请求。Request是一个请求的封装类,包含了图片加载所需的各种参数和配置。Engine是Glide的核心引擎,负责实际的图片加载和缓存工作。

 

具体来说,当我们使用Glide加载一张图片时,首先会创建一个Request对象,该对象包含了图片的URL、目标ImageView等信息。然后,RequestManager会根据Request的配置生成一个唯一的key,用于标识图片加载请求。接着,RequestManager会将这个请求交给Engine来处理。

Engine首先会检查内存缓存中是否存在已加载过的图片,如果存在则直接返回;如果不存在,则会通过网络请求获取图片,并将其保存到内存缓存和磁盘缓存中。在图片加载过程中,Engine还会根据Request的配置进行图片的缩放、裁剪和转换等操作,以适应目标ImageView的大小和显示效果。

值得一提的是,Glide使用了两级缓存策略,即内存缓存和磁盘缓存。内存缓存使用的是LruCache,它可以在一定的限制内缓存最近使用的图片;磁盘缓存使用的是DiskLruCache,它可以将图片缓存到本地磁盘,以便下次加载时直接读取。

 

总结起来,Glide的实现原理是通过RequestManager管理请求,Engine处理具体的图片加载和缓存工作。通过使用内存缓存和磁盘缓存,以及对图片进行适应性处理,Glide能够高效地加载和显示图片。

标签:Engine,缓存,Glide,框架,Request,加载,图片
From: https://www.cnblogs.com/Sharley/p/17679308.html

相关文章

  • springboot启动错误: 找不到或无法加载主类
    当在eclipse启动springboot项目时出现问题:springboot错误:找不到或无法加载主类解决办法:1,通过cmd命令行,进入项目目录进行,mvncleaninstall进行编译项目install后,再到eclipse上选中项目按F5刷新项目。再运行即可问题解决。2,在eclipse上选中项目 点击clean清理项目再运行问......
  • 三维模型OBJ格式轻量化压缩在大规模场景的加载和渲染的作用分析
    三维模型OBJ格式轻量化压缩在大规模场景的加载和渲染的作用分析 OBJ格式是一种常用的三维模型文件格式,它存储了三维模型的几何信息和纹理坐标等相关属性。在大规模场景中加载和渲染三维模型时,OBJ格式的轻量化压缩对于提高性能和效率起到了重要的作用。首先,使用OBJ格式的轻量......
  • GO框架心得
    对于有其它语言开发经验的来说对框架并不陌生,框架是整个或部分系统的可重用设计,表现为一组抽象构件及构件实力间交互的方法,框架是可被应用开发者定制的应用骨架。简单理解:框架就相当于建房子时,应用梁、柱子、承重墙等做起来的钢筋混凝土结构框架,是一种半成品,里面的功能可以根据自己......
  • 前端微应用框架(qiankun)调研
    一、安装1、主应用安装qiankun(子应用只做代码配置,无需任何安装)yarnaddqiankun#或者npmiqiankun-S 二、关键参数介绍1、主应用注册微应用import{registerMicroApps,start,setDefaultMountApp,  loadMicroApp  }from'qiankun';registerMicroApps(apps,......
  • avue表单组件后台拖拉拽框架avue-form-design在移动端vant框架与uniapp框架下的动态渲
    avue表单组件后台拖拉拽框架avue-form-design:https://github.com/sscfaith/avue-form-designavue表单组件后台拖拉拽框架avue-form-design在移动端vant框架与uniapp框架下的动态渲染转换适配待补充......
  • 从壹开始前后端开发【.Net6+Vue3】(二)前端框架
    项目名称:KeepGoing(继续前进)介绍工作后,学习的脚步一直停停走走,希望可以以此项目为基础,可以不断的迫使自己不断的学习以及成长将以Girvs框架为基础,从壹开始二次开发一个前后端管理框架在这过程中一步步去学习使用到的技术点,也同时会将在此过程中遇到的问题进行分享项目地址......
  • Golang Gorm 一对多查询 preload预加载
    预加载示例GORM允许使用 Preload通过多个SQL中来直接加载关系,例如:typeUserstruct{gorm.ModelUsernamestringOrders[]Order}typeOrderstruct{gorm.ModelUserIDuintPricefloat64}//查找user时预加载相关Orderdb.Preload("Orders").Fin......
  • 权限框架之jcasbin讲解
    目录1jcasbin1.1前言1.2工作原理1.2.1PERM模型1.2.2Model语法1.2.2.1Request定义1.2.2.2Policy定义1.2.2.3Policyeffect定义1.2.2.4角色定义1.2.2.5匹配器1.2.2.6完整model.conf1.2.3policy.csv1.3准备1.3.1mavan依赖1.3.2配置文件1.2.3读取权限信息进行初始化1.......
  • 小程序启动耗时的优化:延迟加载和异步加载
    在开发小程序时,启动耗时是一个重要的性能指标。用户希望能够尽快地看到小程序的内容,而不是面对长时间的加载等待。为了优化启动耗时,我们可以考虑使用延迟加载和异步加载的技巧。延迟加载的概念和作用延迟加载是一种在小程序启动时,将页面内容进行分步加载的策略。它的核心思想是将页......
  • 集合框架2
    集合框架205-Set接口与实现类的使用1.Set及其实现类特点java.util.Collection:存储一个一个的数据l-----子接口:Set:存储无序的、不可重复的数据(高中学习的集合)l----HashSet:主要实现类:主要实现类;底层使用的是HashMap,即使用数组+单向链表+红黑树结构进行存储。(jdk8中)......