Android 图片加载glide库 一次通关
前言
Glide是一个由Bumptech开发的开源图片加载库,专门用于Android平台。它被广泛应用于Android应用中,以简化图片加载过程,并提高性能和效率。
- Glide能够快速加载图片,同时减少页面加载时间和内存消耗。
- Glide具有强大的缓存机制,支持内存缓存和磁盘缓存,有效地减少重复的图片加载请求。
- Glide的API设计简单直观,使得开发者可以轻松地集成和使用。
使用
从网络上加载图片
Glide.with(context).load("http://example.com/image.jpg").into(imageView);
改变图片的显示效果
MultiTransformation multi = new MultiTransformation(new RoundedCorners(16),new GrayscaleTransformation()
);Glide.with(context).load("http://example.com/image.jpg").apply(RequestOptions.bitmapTransform(multi)).into(imageView);
淡入淡出效果
Glide.with(context).load("http://example.com/image.jpg").transition(DrawableTransitionOptions.withCrossFade()) // 应用淡入淡出效果.into(imageView);
设置图片加载优先级
Glide.with(context).load("http://example.com/high_priority_image.jpg").priority(Priority.HIGH) // 设置为高优先级.into(imageView);
整体运作流程
初始化
首先发生的是Glide的初始化。Glide会根据设置配置(缓存大小、图片解码选项等)初始化其内部结构,包括设置内存缓存、磁盘缓存和网络客户端等。
请求构建
图片加载请求是通过Glide的API构建的,通常会指定图片的来源(URL、资源ID等)、目标ImageView、转换选项以及其他任何参数,如优先级、占位符等。这些信息被封装在一个请求对象中,用于控制图片的加载过程。
缓存查询
在实际发起网络请求前,Glide会首先查询内存缓存。如果请求的图片已存在于内存缓存中,它将直接被加载到目标ImageView中,这个步骤几乎是瞬时的。如果内存缓存未命中,Glide接着会检查磁盘缓存。
如果磁盘缓存中存在请求的图片,Glide会异步地将图片读取到内存中,然后显示。如果磁盘缓存也未命中,Glide将发起一个网络请求,从远程服务器下载图片。
图片解码转换
下载的图片数据需要被解码成Android可以处理的Bitmap对象。在这个过程中,Glide还可以应用各种转换,比如裁剪、缩放或应用自定义的转换(模糊、滤镜等)。
生命周期
Glide智能地管理图片加载与Android组件的生命周期。如果一个组件被销毁,相关的加载请求也会自动取消,这防止了潜在的内存泄露。
一些注意事项
Glide的缓存机制和资源更新问题
资源Key生成:Glide为每一个加载的资源生成一个唯一的key,这个key通常是基于图片的URL、转换配置和尺寸等因素。这个key用于在缓存中查找已存在的图片。如果服务器上的图片内容发生变化但URL没有变,则Glide的缓存机制可能不会意识到这一变化,因为它依赖于key来索引图片。
图片更新处理:如果服务器上的图片更新了,但URL未改变,通常需要在请求中包含一些额外的信息来指示这种变化。这可以通过版本号、时间戳或者其他机制来实现。例如,可以在URL后添加一个查询参数(如?version=20210901
),这样新的URL将生成一个不同的key,从而绕过缓存并重新加载图片。
HTTP请求方法问题
HTTP GET方法:在大多数图片加载库中,标准的做法是使用HTTP GET方法来请求图片。GET方法是用来请求数据的,它会返回请求的资源,这在请求图片时是预期的行为。
HTTP HEAD方法:HEAD方法与GET方法类似,但服务器在响应HEAD请求时不会返回消息体,只返回头信息。这可以用于快速检查资源的状态(如最后修改时间),而不需要下载整个资源。Glide先使用HEAD方法用于检查图片是否更新。如果HEAD响应显示资源已更新(例如,通过比对Last-Modified
或ETag
头,HTTP缓存相关的知识),则Glide可以决定是否重新发起GET请求来下载新的图片资源,没有更新(状态码304),客户端可以安全使用缓存资源。
Glide对于大图片的处理
Glide会自动检测目标ImageView
的大小,并只加载所需尺寸的图片。这意味着即使源图片的尺寸非常大,Glide也会根据ImageView
的实际显示需求来调整图片的分辨率。
Glide处理图片加载的过程都是在后台线程进行的,这确保了即使是处理大图片时,也不会阻塞主线程,保持应用界面的流畅响应。
Glide在将图片数据解码成位图时采用了优化的策略。例如,Glide可以配置使用低质量的解码策略(缩小采样率)来加载大图片,这种方式可以在不显著影响视觉质量的前提下减少内存消耗。
Glide还能有效管理图片资源的回收。当图片不再被需要时(例如,对应的ImageView
已经从布局中移除),Glide会及时释放这些资源,以保证内存的高效利用。
相关文章:
Android 图片加载glide库 一次通关
前言 Glide是一个由Bumptech开发的开源图片加载库,专门用于Android平台。它被广泛应用于Android应用中,以简化图片加载过程,并提高性能和效率。 Glide能够快速加载图片,同时减少页面加载时间和内存消耗。Glide具有强大的缓存机制…...

Spring OAuth2:开发者的安全盾牌!(上)
何利用Spring OAuth2构建坚不可摧的安全体系?如何使用 OAuth2 从跨域挑战到性能优化,每一个环节都为你的应用保驾护航? 文章目录 Spring OAuth2 详解1. 引言简述OAuth2协议的重要性Spring Framework对OAuth2的支持概述 2. 背景介绍2.1 OAuth2…...

设计模式使用(成本扣除)
前言 名词解释 基础名词 订单金额:用户下单时支付的金额,这个最好理解 产品分成:也就是跟其他人合做以后我方能分到的金额,举个例子,比如用户订单金额是 100 块,我方的分成是 80%,那么也就是…...
输入输出(2)——C++的标准输出流
目录 一、C的标准输出流 (一)cout、cerr和clog流对象 1、cout 流对象 2、cerr 流对象 3、clog流对象 (二)用函数put输出字符 (三)用函数 write 输出字符 一、C的标准输出流 标准输出流——流向标准输…...

C语言序列化和反序列化--TPL(一)
TPL TPL说明网站 C语言中高效的序列化 您可以使用tpl快速轻松地存储和重新加载C数据。Tpl是一个用于序列化C数据的库。数据以自然二进制形式存储。该API很小,并试图保持“不碍事”。Tpl可以序列化许多C数据类型,包括结构。Tpl与文件、内存缓冲区和文件…...
Session + JWT + Cookie
00:HTTP无状态(为了保持状态,前端好麻烦,又要自己存,又要想办法带出去,于是使用cookie) 01:Cookie 将用户信息,在每次请求时候 带给后端(但是自己存储大小有…...

PaddleOCR2.7+Qt5
章节一:Windows 下的 PIP 安装 官网安装教程地址 按照里面的教程去安装 如果使用cuda版本的还要安装tensorrt,不然后面运行demo程序的程序会报如下错。 下载TensorRT 8版本,tensorrt下载地址 章节二:编译源码 进入官网源码地址 下…...

在Android中解析XML文件并在RecyclerView中显示
1. 引言 最近工作有解析外部xml文件在App中显示的需求,特来写篇文章记录一下,方便下次使用。 2. 准备工作 首先,在项目的AndroidManifest.xml文件中添加读取外部存储的权限声明。 <uses-permission android:name"android.permiss…...

Notes for video: EDC-Con 2022/01 - EDC Conceptual Overview and Architecture
Eclipse Dataspace Connector 中文概念 Eclipse Dataspace Connector (EDC) 是一个开源项目,旨在提供一种标准化的方法来连接和共享数据空间中的数据。它是 Eclipse Foundation 下的一个项目,目标是促进数据共享和数据交换的互操作性。以下是 EDC 的一些…...
windows下nginx配置https证书
1、制作证书 1.1 安装工具openSSL。下载地址:http://slproweb.com/products/Win32OpenSSL.html Win64OpenSSL_Light-3_1_0.exe安装(假定安装位置在 d:\openSSL\) 1.2 配置openSSL环境。 新建系统变量OpenSSL值为d:\openSSL\bin,相…...

Llama改进之——RoPE旋转位置编码
引言 旋转位置编码(Rotary Position Embedding, RoPE)将绝对相对位置依赖纳入自注意力机制中,以增强Transformer架构的性能。目前很火的大模型LLaMA、QWen等都应用了旋转位置编码。 之前在[论文笔记]ROFORMER中对旋转位置编码的原始论文进行了解析,重点…...

Python的解析网页
课前案例 通过requests模块爬取指定网站中的图片并保存到本地目录中。 上述案例采用的是同步方式下载图片,效率太低。异步方式如下(线程): # target为目标函数;args中传入的是download函数的参数url threading.Threa…...

VBA技术资料MF159:实现某个区域内的数据滚动
我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套,分为初级、中级、高级三大部分,教程是对VBA的系统讲解&#…...

开源DMS文档管理系统 Nuxeo Vs Alfresco对比及 API 使用概述
1. 文档管理系统是什么 文档管理系统(DMS:Document Management System)是一种软件系统,用于组织、存储、检索和管理电子文档和文件。这些文件可以是各种格式的电子文档,如文本文档、电子表格、图像、音频或视频文件等…...
lambda函数实践
文章目录 1.简单实例2.lambda函数使用3.捕获列表的使用4.lambda表达式的应用1.简单实例 2.lambda函数使用 3.捕获列表的使用 4.lambda表达式的应用 #include <iostream> #include <vector>using namespace std;/** 1.简单实例* 2.lambda函数使用* 3.捕获列表的…...

[leetcode hot 150]第一百九十一题,位1的个数
题目: 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中设置位的个数(也被称为汉明重量)。 这道题比较简单,直接对最后一位进行与1的与操作,然…...

gitea的git库备份与恢复
文章目录 gitea库的备份与恢复概述笔记实验环境更新git for windows更新 TortoiseGit备份已经存在的gitea的git库目录使用gitea本身来备份所有git库目录将gitea库恢复到新目录m1m2m3启动gitea - 此时已经恢复完成FETCH_HEAD 中有硬写位置再查一下app.ini, 是否改漏了。m1m2 总结…...
【强化学习05】从Q学习到深度Q学习
深度Q学习(Deep Q-Learning, DQN)是将深度学习与Q学习结合起来的一种强化学习方法,利用神经网络来近似Q值函数,解决传统Q学习在大规模或连续状态空间中的局限性。下面详细解释DQN的机理。 背景知识 Q学习 Q学习是一种值函数法&…...

FPGA实现多路并行dds
目录 基本原理 verilog代码 仿真结果 基本原理 多路并行dds,传统DDS的局限性在于输出频率有限。根据奈奎斯特采样定理,单路DDS的输出频率应小于系统时钟频率的一半。但是在很多地方,要使采样率保持一致,所以,为了…...

ArcgisPro3.1.5安装手册
ArcgisPro3.1.5安装手册 一、目录介绍: 二、安装教程: (1)安装顺序:最先安装运行环境(runtime6.0.5),接着安装install里面的文件,最后复制path里面的文件替换到软件bin文件夹下即可。 (2)具体安装步骤ÿ…...

springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...

c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...

如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...