当前位置: 首页 > news >正文

Android 图片加载glide库 一次通关

前言

Glide是一个由Bumptech开发的开源图片加载库,专门用于Android平台。它被广泛应用于Android应用中,以简化图片加载过程,并提高性能和效率。

  1. Glide能够快速加载图片,同时减少页面加载时间和内存消耗。
  2. Glide具有强大的缓存机制,支持内存缓存和磁盘缓存,有效地减少重复的图片加载请求。
  3. 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-ModifiedETag头,HTTP缓存相关的知识),则Glide可以决定是否重新发起GET请求来下载新的图片资源,没有更新(状态码304),客户端可以安全使用缓存资源。

Glide对于大图片的处理

Glide会自动检测目标ImageView的大小,并只加载所需尺寸的图片。这意味着即使源图片的尺寸非常大,Glide也会根据ImageView的实际显示需求来调整图片的分辨率。

Glide处理图片加载的过程都是在后台线程进行的,这确保了即使是处理大图片时,也不会阻塞主线程,保持应用界面的流畅响应。

Glide在将图片数据解码成位图时采用了优化的策略。例如,Glide可以配置使用低质量的解码策略(缩小采样率)来加载大图片,这种方式可以在不显著影响视觉质量的前提下减少内存消耗。

Glide还能有效管理图片资源的回收。当图片不再被需要时(例如,对应的ImageView已经从布局中移除),Glide会及时释放这些资源,以保证内存的高效利用。

http://www.lryc.cn/news/357257.html

相关文章:

  • Spring OAuth2:开发者的安全盾牌!(上)
  • 设计模式使用(成本扣除)
  • 输入输出(2)——C++的标准输出流
  • C语言序列化和反序列化--TPL(一)
  • Session + JWT + Cookie
  • PaddleOCR2.7+Qt5
  • 在Android中解析XML文件并在RecyclerView中显示
  • Notes for video: EDC-Con 2022/01 - EDC Conceptual Overview and Architecture
  • windows下nginx配置https证书
  • Llama改进之——RoPE旋转位置编码
  • Python的解析网页
  • VBA技术资料MF159:实现某个区域内的数据滚动
  • 开源DMS文档管理系统 Nuxeo Vs Alfresco对比及 API 使用概述
  • lambda函数实践
  • [leetcode hot 150]第一百九十一题,位1的个数
  • gitea的git库备份与恢复
  • 【强化学习05】从Q学习到深度Q学习
  • FPGA实现多路并行dds
  • ArcgisPro3.1.5安装手册
  • 三大主流框架
  • 【C++】:vector容器的底层模拟实现迭代器失效隐藏的浅拷贝
  • 必看项目|多维度揭示心力衰竭患者生存关键因素(生存分析、统计检验、随机森林)
  • centos安装Redis
  • 继承与多态2
  • 在RT-Thread下为MPU手搓以太网MAC驱动-3
  • Cocos Creator 2D物理引擎的使用详解
  • 618局外人抖音:别人挤压商家“拼价格”,它默默联合商家“抢用户”?
  • 【Unity AR开发插件】五、运行示例程序
  • JavaScript className 类名属性操作
  • 做场外个股期权怎么询价