2024年Android最全Android Glide使用姿势与原理分析_安卓 glide,带着问题深入学习Handler

架构师筑基包括哪些内容

我花了将近半个月时间将:深入 Java 泛型.、注解深入浅出、并发编程.、数据传输与序列化、Java 虚拟机原理、反射与类加载、高效 IO、Kotlin项目实战等等Android架构师筑基必备技能整合成了一套系统知识笔记PDF,相信看完这份文档,你将会对这些Android架构师筑基必备技能有着更深入、更系统的理解。

由于文档内容过多,为了避免影响到大家的阅读体验,在此只以截图展示部分内容

注:资料与上面思维导图一起看会更容易学习哦!每个点每个细节分支,都有对应的目录内容与知识点!



这份资料就包含了所有Android初级架构师所需的所有知识!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

 .load(url)
 .into(imageView)

这里的`context`是上下文对象,`url`是图片的URL,`imageView`是显示图片的ImageView。


#### 设置占位符和错误图片


你可以利用`placeholder()`方法设置加载过程中显示的占位符图片,以及使用`error()`方法设置加载失败时显示的图片:



Glide.with(context)
.load(url)
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.into(imageView)


#### 设置缩略图


Glide支持设置缩略图,以提高加载速度。通过`thumbnail()`方法设置缩略图的URL或资源ID:



Glide.with(context)
.load(url)
.thumbnail(0.1f)
.into(imageView)


#### 图片变换


你可以使用`transform()`方法为图片添加变换效果。例如,使用`circleCrop()`方法可将图片裁剪成圆形,`roundedCorners()`方法可将图片角变为圆角:



Glide.with(context)
.load(url)
.transform(CircleCrop())
.into(imageView)


#### 加载动画


通过`animate()`方法,你可以为图片加载过程添加动画效果。例如,使用`crossFade()`方法添加淡入淡出效果:



Glide.with(context)
.load(url)
.animate(R.anim.fade_in)
.into(imageView)


### 图片压缩


Glide通过根据目标ImageView的大小和ScaleType来计算图片的实际大小,并进行压缩。


在加载图片时,需要指定目标ImageView的宽高和ScaleType。Glide会根据这些信息决定图片的压缩方式。


若目标ImageView的宽高比例与图片的比例不一致,Glide会根据ScaleType计算缩放比例,然后将图片按比例压缩,以适应ImageView大小。


若目标ImageView的宽高比例与图片的比例一致,Glide会直接加载原始图片,不进行压缩。


通过这种方式,Glide根据目标ImageView来自动进行图片压缩,以提高加载速度和节省内存。


另外,Glide也支持自定义图片压缩策略。我们可以实现`Transformation`接口来定义自己的压缩算法。


#### 自定义图片压缩策略


自定义图片压缩策略通过实现`Transformation`接口实现。该接口包含`transform()`方法,可以在其中定义自定义的压缩操作。


以下是一个示例,展示如何实现自定义的图片压缩策略:



class CustomTransformation : Transformation {
override fun transform(
context: Context,
resource: Resource,
outWidth: Int,
outHeight: Int
): Resource {
val originalBitmap = resource.get()
// 自定义压缩算法
val compressedBitmap = customCompress(originalBitmap)
return BitmapResource(compressedBitmap, Glide.get(context).bitmapPool)
}

override fun getId(): String {
    return "customTransformation" // 返回唯一标识符,用于缓存
}

private fun customCompress(bitmap: Bitmap): Bitmap {
    // 自定义压缩算法实现
    // ...
    return compressedBitmap
}

}


使用自定义图片压缩策略时,可以在Glide的链式调用中应用:



Glide.with(context)
.load(url)
.transform(CustomTransformation())
.into(imageView)


通过实现`Transformation`接口,你可以根据需求制定不同的压缩算法,以满足特定的图片压缩需求。


### 图片缓存


Glide使用双缓存策略来管理图片缓存。它在内存中缓存未经压缩的原始图片,提升加载速度,同时还会将压缩后的图片存储在磁盘中,节省内存和流量。


Glide的缓存机制非常智能。它根据图片的URL或资源ID生成唯一的缓存键,以确保不同的图片不会混淆。此外,Glide支持自定义缓存的大小和有效期


,以适应不同需求。


Glide的缓存机制是其优秀性能的关键之一。通过内存缓存和磁盘缓存的组合,它能够高效地管理已加载的图像数据,从而提高后续加载的速度。


#### 内存缓存


Glide使用内存缓存来存储最近使用的图像数据,以便快速访问。内存缓存基于LRU(Least Recently Used,最近最少使用)算法,保留最近加载的图像数据。当应用需要再次访问这些图像时,可以直接提供,从而避免频繁的网络请求和磁盘读取。


#### 磁盘缓存


磁盘缓存分为活动资源缓存和非活动资源缓存。


* **活动资源缓存(Active Resources Cache):** 这是一个小型、可写的磁盘缓存,存储当前正在使用的图像数据。它有助于减少频繁加载的图片的重复磁盘读取。
* **未活动资源缓存(Inactive Resources Cache):** 这是一个更大、只读的磁盘缓存,用于长期存储已加载的图像数据。当活动资源缓存已满时,Glide会将不再活跃的图片从活动缓存中移至未活动资源缓存,以腾出空间供新图片使用。


#### 缓存策略


Glide允许开发者根据需求设置不同的缓存策略。例如:


* `DiskCacheStrategy.ALL`: 在内存和磁盘上都缓存。
* `DiskCacheStrategy.NONE`: 不使用磁盘缓存。


# 尾声

开发是需要一定的基础的,我是08年开始进入Android这行的,在这期间经历了Android的鼎盛时期,和所谓的Android”凉了“。中间当然也有着,不可说的心酸,看着身边朋友,同事一个个转前端,换行业,其实当时我的心也有过犹豫,但是我还是坚持下来了,这次的疫情就是一个好的机会,大浪淘沙,优胜劣汰。再等等,说不定下一个黄金浪潮就被你等到了。


*   **330页 PDF Android核心笔记**

![](https://img-blog.csdnimg.cn/img_convert/da9ab1f610677f68383ace46d87da8d4.webp?x-oss-process=image/format,png)

*   几十套**阿里 、字节跳动、腾讯、华为、美团等公司2020年的面试题**

![](https://img-blog.csdnimg.cn/img_convert/d3615e3f407f959ca2cf59d381ad9a76.webp?x-oss-process=image/format,png)

![](https://img-blog.csdnimg.cn/img_convert/6dadfa46544b0817180a5035780452e3.webp?x-oss-process=image/format,png)

*   PDF和思维脑图,包含**知识脉络 + 诸多细节**

![](https://img-blog.csdnimg.cn/img_convert/3480aabf63efb83c2a023136053772c9.webp?x-oss-process=image/format,png)

*   **Android进阶系统学习视频**

![](https://img-blog.csdnimg.cn/img_convert/06a0f78392c3226b74c2036d46e5eb17.webp?x-oss-process=image/format,png)



**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Android图片框架Glide-3.7.0(最新,很强大),超好用的图片框架(包含jar和源码) Glide 是一个高效、开源、 Android设备上的媒体管理框架,它遵循BSD、MIT以及Apache 2.0协议发布。Glide具有获取、解码和展示视频剧照、图片、动画等功能,它还有灵活的API,这些API使开发者能够将Glide应用在几乎任何网络协议栈里。创建Glide的主要目的有两个,一个是实现平滑的图片列表滚动效果,另一个是支持远程图片的获取、大小调整和展示。近日,Glide 3.0发布,现已提供 jar包下载 ,同时还支持使用Gradle以及Maven进行构建。该版本包括很多值得关注的新功能,如支持Gif 动画和视频剧照解码、智能的暂停和重新开始请求、支持缩略图等,具体新增功能如下如下: GIF 动画的解码 :通过调用Glide.with(context).load(“图片路径“)方法,GIF动画图片可以自动显示为动画效果。如果想有更多的控制,还可以使用Glide.with(context).load(“图片路径“).asBitmap()方法加载静态图片,使用Glide.with(context).load(“图片路径“).asGif()方法加载动画图片 本地视频剧照的解码: 通过调用Glide.with(context).load(“图片路径“)方法,Glide能够支持Android设备中的所有视频剧照的加载和展示 缩略图的支持: 为了减少在同一个view组件里同时加载多张图片的时间,可以调用Glide.with(context).load(“图片路径“).thumbnail(“缩略比例“).into(“view组件“)方法加载一个缩略图,还可以控制thumbnail()中的参数的大小,以控制显示不同比例大小的缩略图 Activity 生命周期的集成: 当Activity暂停和重启时,Glide能够做到智能的暂停和重新开始请求,并且当Android设备的连接状态变化时,所有失败的请求能够自动重新请求 转码的支持: Glide的toBytes() 和transcode() 两个方法可以用来获取、解码和变换背景图片,并且transcode() 方法还能够改变图片的样式 动画的支持: 新增支持图片的淡入淡出动画效果(调用crossFade()方法)和查看动画的属性的功能 OkHttp 和Volley 的支持: 默认选择HttpUrlConnection作为网络协议栈,还可以选择OkHttp和Volley作为网络协议栈 其他功能: 如在图片加载过程中,使用Drawables对象作为占位符、图片请求的优化、图片的宽度和高度可重新设定、缩略图和原图的缓存等功能

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值