首页 > 其他分享 >Android 图片加载glide库 一次通关

Android 图片加载glide库 一次通关

时间:2024-05-29 18:31:17浏览次数:29  
标签:缓存 glide Glide 内存 请求 Android 加载 图片

前言

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会及时释放这些资源,以保证内存的高效利用。

标签:缓存,glide,Glide,内存,请求,Android,加载,图片
From: https://blog.csdn.net/m0_63629756/article/details/137914845

相关文章

  • 升鲜宝供应链管理系统重构版发布(技术点:Java8、mysql8.0 uniapp、vue、android、web 框
    升鲜宝供应链管理系统重构版发布(技术点:Java8、mysql8.0uniapp、vue、android、web框架:Vue3+SpringBoot3),界面功能(三) 主要功能要点:     权限管理(组织机构、用户管理、角色管理、岗位管理)     系统设置(菜单管理、参数管理、数据字典、定时任务、文件管......
  • JVM类加载器
    什么是类加载器JVM只会字节码文件,类加载器的作用就是将字节码文件加载到JVM中,从而让Java程序能够启动起来。类加载器有哪些启动类加载器(BootStrapClassLoader):加载JAVAHOME/jre/ib目录下的库。扩展类加载器(ExtClassLoader):主要加载JAVAHOME/jre/lib/ext目录中的类。应......
  • QGIS开发笔记(三):Windows安装版二次开发环境搭建(下):将QGis融入QtDemo,添加QGis并加载tif遥
    前言  使用QGis的目的是进行二次开发,或者说是融入我们的应用(无人车、无人船、无人机),本片描述搭建QGis二次基础开发环境,由于实在是太长了,进行了分篇:上半部分:主要是安装好后,使用QtCreator可以使用QGIs的apps下的Qt使用对应的编译器编译不带qgis的空工程。下半部分:在上半......
  • k8s subpath解决加载配置覆盖原目录问题,configmap与secret热更新
    问题:传统上直接挂载会直接覆盖原目录问题还原挂载配置 重启容器挂了 进入容器查看文件不见了,只剩下挂载文件了,目录被覆盖了问题解决subpath:1、当挂载目录存在多个文件,不会覆盖所有文件;2、挂载单个文件而不是整个目录。修改配置subpath热更新问题:1.cm或secret以......
  • 在 Vue 3 中如何实现代码拆分和懒加载?
    在现代开发中,前端应用越来越复杂,同时用户期望应用能够迅速响应。为了解决加载速度问题,前端框架如Vue3提供了代码拆分和懒加载功能。这不仅能提升性能,还能增强用户体验。接下来,我们将详细介绍在Vue3中如何实现代码拆分和懒加载。什么是代码拆分和懒加载?代码拆分(Code......
  • docker安装jenkins+Android sdk
    1、宿主机安装Java环境参考这个链接:https://www.cnblogs.com/likecoke/p/13638419.html2、宿主机安装 AndroidSDK2.1下载zip包wgethttps://dl.google.com/android/repository/commandlinetools-linux-6858069_latest.zip2.2解压到 /home/android-sdk路径下unzip-d/hom......
  • Android14音频进阶之dump各阶段音频数据<Tee Sink方案>(七十五)
    简介:CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!优质专栏:Audio工程师进阶系列【原创干货持续更新中……】......
  • 深入解析Java类加载机制:原理、过程与实践
    深入解析Java类加载机制:原理、过程与实践Java的类加载机制是Java虚拟机(JVM)运行时环境的核心组件,它决定了Java类和接口的加载、连接和初始化方式。这一机制不仅确保了应用程序的安全性和稳定性,还提供了灵活的动态加载能力,使得Java程序能够在运行时加载和使用外部类。这篇文......
  • Android 关于MVP、MVC、MVVM原理、使用方法、优缺点以及共同之处与不同之处详细介绍
    Android关于MVP、MVC、MVVM原理、使用方法、优缺点以及共同之处与不同之处详细介绍Android应用程序的设计模式,常见的三种模式是MVP(Model-View-Presenter)、MVC(Model-View-Controller)和MVVM(Model-View-ViewModel)。它们在设计和组织Android应用程序中起着不同的作用,都......
  • Android通过adb命令模拟发送广播
    前言通过命令行执行adbshellambroadcast发送广播通知。adbshellambroadcast后面的参数有:<INTENT>specificationsincludetheseflagsandarguments:[-a<ACTION>][-d<DATA_URI>][-t<MIME_TYPE>][-c<CATEGORY>[-c<CATEGORY>]...][-e|--......