Android glide框架及框架涉及到的设计模式
目录
- 原文链接
- Android glide框架 简单使用介绍
- Glide 框架整体结构设计
- Glide 框架的优点
- 基本使用:
- Glide占位符
- Android glide框架涉及到的设计模式
原文链接
Android glide框架 简单使用介绍
Glide:快速高效的Android图片加载库,可以自动加载网络、本地文件、app资源中的图片,注重于平滑的滚动
Glide基本使用
开源地址:https://github.com/bumptech/glide
中文文档:https://muyangmin.github.io/glide-docs-cn/
模块的build.gradle中引入Glide:
implementation 'com.github.bumptech.glide:glide:4.12.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
Glide 框架整体结构设计
原文链接

Glide 框架主要分为两大流程:
1.1 图片请求的构建流程。
1.2 图片缓存的获取流程。图片请求构建流程内又分为四个模块:
2.1 用户态的请求模块: 用户使用 Glide 进行链式调用的时候会生成一个用户态的 Request。
2.2 真实的请求模块: 由于步骤2.1中会根据场景构建多种Request,因此在发起图片请求时需要进行收口,因此会使用用户态的 Request 构建一个真正的 GenericRequest 请求。
2.3 Request 生命周期管理模块: Glide 的一大特点是会将图片的请求和页面生命周期进行绑定,避免出现内存泄漏的风险,因此会有一个 Request 生命周期管理模块。
2.4 Registry中心模块: 由于 Glide 支持加载多种类型的数据,因此在注册中心会预先注册所支持类型处理类的信息。图片缓存一共分为3大层,5小层:
3.1 内存缓存(2小层): 弱引用缓存、LruCache。
3.2 本地缓存(2小层): 本地 ResultCache 缓存、本地 SourceCache 缓存。
3.3 Source 数据源(1小层): 网络获取、本地 AssetPath 获取、其它本地图片。五层缓存进行定义
第一层:内存缓存 -> 弱应用缓存(ActiveResource)。
第二层:内存缓存 -> LruCache
第三层:磁盘缓存 -> ResultCache (经过transform的图)
第四层:磁盘缓存 -> SourceCache (从DataFetcher 直接拉取到的数据)
第五层:数据源 -> Source
Glide 框架的优点
加载类型多样化:Glide 支持 Gif、WebP、Jpeg、Png 等格式的图片。
生命周期的绑定:图片请求与页面生命周期绑定,避免内存泄漏。
使用简单(链式调用),且提供丰富的 Api 功能 (如: 图片裁剪等功能)。
高效的缓存策略:
Glide 框架的优点
- 支持多种缓存策略 (Memory 和 Disk 图片缓存)。
- 根据 ImageView 的大小来加载相应大小的图片尺寸。
- 内存开销小,默认使用 RGB_565 格式 (3.x 版本)。
- 复用对象 (享元模式),降低内存的抖动。
- 通过 Lru 算法来管理内存缓存和磁盘缓存,保证资源使用的可控性。
基本使用:
Glide.with(this)
.load(strUrl)
.into(mShow_img);
- Glide.with中参数是哪个环境变量对象,说明它会和哪个环境变量的生命周期绑定到一起。
Glide的使用大量减少了因为图片导致的OOM的可能。 - url 可以是一个R.** 的图片资源id,也可以是https.*, 也可以是文件对象
如果是https,则需在AndroidManifest.xml中申请网络权限;如果是文件对象,则需在AndroidManifest.xml中申请存储卡读写权限。 - into方法将图片传递给指定的ImageView
Glide占位符
Glide4中占位图的使用方法,包括(placeholder、error、fallback)三种占位图:
- placeholder:正在请求图片的时候展示的图片
- error:如果请求失败的时候展示的图片(如果没有设置,还是展示placeholder的占位符)
- fallback:如果请求的url/model为 null 的时候展示的图片(如果没有设置,还是展示placeholder的占位符)
RequestOptions requestOptions = new RequestOptions().placeholder(R.drawable.hold).error(R.drawable.error).fallback(R.drawable.fallback).override(100, 100); //override指定加载图片大小,可不设置Glide.with([fragment/Context/View]).load(url).apply(requestOptions).into(imageView);
Android glide框架涉及到的设计模式
- Builder 模式:Glide 使用 Builder 模式来构建图片加载请求。通过链式调用一系列方法设置加载参数和配置,最后调用 into() 方法执行加载操作。
Glide.with(context).load(imageUrl).placeholder(R.drawable.placeholder).centerCrop().into(imageView);
- Singleton(单例)模式:Glide 的核心组件 Glide、RequestManager 和 RequestBuilder 都采用了单例模式,确保在整个应用程序中只有一个实例。
Glide glide = Glide.get(context);
RequestManager requestManager = Glide.with(fragment);
- Proxy(代理)模式:Glide 使用了代理模式来实现图片加载的过程。通过使用 RequestManager 作为中介,封装了 Glide 的加载逻辑,并提供了一系列的方法来管理加载请求。
RequestManager requestManager = Glide.with(context);
requestManager.load(imageUrl).placeholder(R.drawable.placeholder).into(imageView);
- Strategy(策略)模式:Glide 中的 Transformation 和 Decoder 使用了策略模式。Transformation 定义了一系列的图片转换策略,如圆角、缩放等;Decoder 定义了一系列的图片解码策略,如 Bitmap、Gif 等。
RequestOptions requestOptions = new RequestOptions().transform(new RoundedCorners(16)).override(300, 300);Glide.with(context).load(imageUrl).apply(requestOptions).into(imageView);
- Observer(观察者)模式:Glide 中的生命周期管理使用了观察者模式。通过监听 Fragment 或 Activity 的生命周期回调,及时清理和取消图片加载请求,避免内存泄漏和无效的请求。
@Override
public void onStart() {super.onStart();Glide.with(this).onStart();
}@Override
public void onStop() {super.onStop();Glide.with(this).onStop();
}
相关文章:
Android glide框架及框架涉及到的设计模式
目录 原文链接Android glide框架 简单使用介绍Glide 框架整体结构设计Glide 框架的优点基本使用:Glide占位符 Android glide框架涉及到的设计模式 原文链接 Android glide框架 简单使用介绍 Glide:快速高效的Android图片加载库,可以自动加载…...
使用yolov5进行安全帽检测填坑指南
参考项目 cGitHub - PeterH0323/Smart_Construction: Base on YOLOv5 Head Person Helmet Detection on Construction Sites,基于目标检测工地安全帽和禁入危险区域识别系统,🚀😆附 YOLOv5 训练自己的…...
【BASH】回顾与知识点梳理(三十二)
【BASH】回顾与知识点梳理 三十二 三十二. SELinux 初探32.1 什么是 SELinux当初设计的目标:避免资源的误用传统的文件权限与账号关系:自主式访问控制, DAC以政策规则订定特定进程读取特定文件:委任式访问控制, MAC 32.2 SELinux 的运作模式安…...
vscode远程调试PHP代码
目录 一、准备工作 二、ssh连接和xdebug配置 1.ssh连接 2.xdebug配置 三、xdebug调试,访问 一、准备工作 1.安装vscode里面的两个扩展 2.安装对应PHP版本的xdebug 去xdebug官方,复制自己的phpinfo源码到方框里,再点击Analyse Xdebug: …...
flink1.17 实现 udf scalarFunctoin get_json_object 支持 非标准化json
特色 相比官方的json_value,该函数支持非标准化json,比如v是个object,但是非标准json会外套一层引号,内部有反引号. eg: {"kkkk2": "{\"kkkk1\":\"vvvvvvv\"}" } 支持value为 100L 这种java格式的bigint. {"k":999L…...
基于VUE3+Layui从头搭建通用后台管理系统(前端篇)九:自定义组件封装下
一、本章内容 续上一张,本章实现一些自定义组件的封装,包括文件上传组件封装、级联选择组件封装、富文本组件封装等。 1. 详细课程地址: 待发布 2. 源码下载地址: 待发布 二、界面预览 三、开发视频 基于VUE3+Layui从头搭建通用后台管...
设计模式详解-装饰器模式
类型:结构型模式 实现原理:装饰器模式通过将对象包装在装饰器类中,并在保持类方法签名完整性的前提下,提供额外功能 作用:动态地给一个对象添加一些额外的职责。增加功能方面,装饰器模式比生成子类更灵活…...
Android5:活动生命周期
创建项目Stopwatch activity_main.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayoutxmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"android:layout_w…...
第2章 数据结构和算法概述
2.3线性结构和非线性结构 数据结构包括: 线性结构和非线性结构 2.3.1线性结构 线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系线性结构有两种不同的存储结构,即顺序存储结构(数组)和链式存储结构(链表)。顺序存储的线性表称…...
WPF国际化的实现方法(WpfExtensions.Xaml)
https://blog.csdn.net/eyupaopao/article/details/120090431 resx资源文件实现 resx资源文件,实现的过程比第一种复杂,但resx文件本身编辑比较简单,维护起来比较方便。需要用到的框架:WpfExtensions.Xaml 为每种语言添加.resx资…...
【Linux】—— 进程程序替换
目录 序言 (一)替换原理 1、进程角度——见见猪跑 1️⃣ 认识 execl 函数 2、程序角度——看图理解 (二)替换函数 1、命名理解 2、函数理解 1️⃣execlp 2️⃣execv 3️⃣execvp 4️⃣execle 5️⃣execve 6️⃣execve…...
idea创建javaweb项目,jboss下没有web application
看看下图这个地方有没有web application...
广东灯具3D扫描抄数建模服务3D测绘出图纸三维逆向设计-CASAIM
灯具三维逆向建模是一种将实际物体转换为数字模型的过程。通过逆向工程技术,可以将现有的灯具进行3D扫描,然后利用专业的逆向设计软件将其转换为准确的三维模型。 以下是CASAIM实施灯具三维逆向建模的一般步骤图: 1. 扫描:三维扫…...
Nginx反向代理-负载均衡、webshell实践
目录 1.nginx反向代理-负载均衡 1)搭建web项目 2)修改 nginx.conf的配置 2.webshell 实践 1)异或操作绕过 2)取反绕过 3)php语法绕过 1.nginx反向代理-负载均衡 1)搭建web项目 首先通过SpringBoo…...
第六阶|见道明心的笔墨(上)从书法之美到生活之美——林曦老师的线上直播书法课
如果你有需要,可以找我的,我这边有老师的所有课程 如果你有需要,可以找我的,我这边有老师的所有课程...
nbcio-boot从3.0升级到3.1的出现用户管理与数据字典bug
升级后出现 系统管理里的用户管理出现下面问题 2023-08-17 09:44:38.902 [http-nio-8080-exec-4] [1;31mERROR[0;39m [36mo.jeecg.common.exception.JeecgBootExceptionHandler:69[0;39m - java.lang.String cannot be cast to java.lang.Long java.lang.ClassCastException:…...
Curson 编辑器
Curson 汉化与vacode一样 Curson 自带chat功能 1、快捷键ctrlk(代码中编辑) 2、快捷键ctrll 右侧打开窗口...
Shell编程学习之函数的应用
Shell编程中的函数:伪代码表示: function 函数名(){函数体}注意事项: 1.函数无参数; 2.函数无返回值类型; 3.function可以不写; 4.函数不被调用,就不会执行; 5.函数名不能使用…...
Fork/Join框架
是什么 Fork/Join框架是Java 7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。 Fork: 把一个大任务切分为若干子任务并行的执行 Join: 合并这些子任务的执行结果,最后…...
LeetCode_字符串_中等_468.验证 IP 地址
目录 1.题目2.思路3.代码实现(Java) 1.题目 给定一个字符串 queryIP。如果是有效的 IPv4 地址,返回 “IPv4” ;如果是有效的 IPv6 地址,返回 “IPv6” ;如果不是上述类型的 IP 地址,返回 “Nei…...
全栈开发新范式:Vibe-Stack集成技术栈实战解析
1. 项目概述与核心价值 最近在探索全栈开发的新范式时,我注意到了 pastropsucez/vibe-stack 这个项目。乍一看这个名字,你可能会觉得有点“玄学”,但深入探究后,我发现它其实是一个高度集成、开箱即用的现代Web应用开发栈。简单…...
用手机遥控电脑演讲:开源项目Presentation-Control部署与实战指南
1. 项目概述与核心价值最近在准备一个重要的线上技术分享,过程中遇到了一个几乎所有演讲者都会头疼的问题:如何优雅地控制幻灯片播放,同时又能自如地操作电脑上的其他演示工具,比如代码编辑器、终端或者在线Demo?传统的…...
Poppins字体:免费开源的现代几何无衬线字体终极指南
Poppins字体:免费开源的现代几何无衬线字体终极指南 【免费下载链接】Poppins Poppins, a Devanagari Latin family for Google Fonts. 项目地址: https://gitcode.com/gh_mirrors/po/Poppins 你是否正在寻找一款既美观又实用的字体来提升设计项目的视觉品质…...
基于Python的自动化数据简报生成:从模板驱动到部署实践
1. 项目概述:数据简报的自动化生成利器如果你也和我一样,每天需要从一堆数据库、日志文件和API接口里捞出数据,然后吭哧吭哧地整理成PPT或者Word报告,那你一定懂这种重复劳动的痛苦。数据本身就在那里,但把它们变成老板…...
Python自动化数据简报:从零构建代码驱动的报告系统
1. 项目概述:数据简报的“瑞士军刀”在数据驱动的时代,无论是数据分析师、产品经理还是业务运营,每天都要面对海量的数据源和复杂的分析需求。我们常常陷入这样的困境:为了一个简单的数据洞察,需要打开多个工具&#x…...
别再乱插拔了!一文搞懂USB2.0设备为啥会‘重置’(Reset),附排查思路
别再乱插拔了!一文搞懂USB2.0设备为啥会‘重置’(Reset),附排查思路 USB设备突然断开、反复识别失败,这种问题在嵌入式开发和硬件调试中几乎人人都会遇到。上周我就被一个USB转串口模块折腾得够呛——每次传输到一半就…...
3分钟掌握Get-cookies.txt-LOCALLY:浏览器Cookie本地导出的终极隐私保护方案
3分钟掌握Get-cookies.txt-LOCALLY:浏览器Cookie本地导出的终极隐私保护方案 【免费下载链接】Get-cookies.txt-LOCALLY Get cookies.txt, NEVER send information outside. 项目地址: https://gitcode.com/gh_mirrors/ge/Get-cookies.txt-LOCALLY 在数字身份…...
深度解析20辆电动汽车29个月真实充电数据:电池容量衰减评估与健康监测关键技术
深度解析20辆电动汽车29个月真实充电数据:电池容量衰减评估与健康监测关键技术 【免费下载链接】battery-charging-data-of-on-road-electric-vehicles This repository is transfered from the personal account of Dr. Zhognwei Deng (Michael Teng) 项目地址: …...
5分钟快速上手:FigmaCN免费中文界面插件终极指南
5分钟快速上手:FigmaCN免费中文界面插件终极指南 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 还在为Figma的英文界面而烦恼吗?想要专注于设计创意却被语言障碍…...
Matlab ode45求解微分方程保姆级教程:从单变量到多智能体系统,附完整代码
Matlab ode45求解微分方程:从单变量到多智能体系统的工程实践 微分方程是描述动态系统演化的核心数学工具,而Matlab的ode45求解器则是工程师和科研人员最常用的数值求解利器。本文将带你从最基础的单个微分方程求解出发,逐步深入到多智能体系…...
