Android Glide使用姿势与原理分析_安卓 glide(3),2024年最新2024移动应用开发前景

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: 不使用磁盘缓存。
  • DiskCacheStrategy.DATA: 只缓存原始数据。
  • DiskCacheStrategy.RESOURCE: 只缓存转换后的资源。
  • DiskCacheStrategy.AUTOMATIC: 根据图片数据源自动选择缓存策略。
清除缓存

若图片发生变化或需要释放存储空间,可手动清除Glide缓存。使用以下代码可清除磁盘缓存:

Glide.get(context).clearDiskCache()

清除内存缓存可使用:

Glide.get(context).clearMemory()

综上所述,Glide的缓存机制通过内存和磁盘缓存的组合,高效地提高了图像加载性能。这种机制使得相同图像能够更快地加载,节省了用户流量,并在离线或网络不稳定时也能正常显示图像。

结论

Android Glide是一款功能强大且灵活的图片加载库。通过深入了解其工作原理和应用方法,你可以更加自如地使用这个优秀的库,提升应用的图片加载体验。

Android 学习笔录

Android 性能优化篇:https://qr18.cn/FVlo89
Android 车载篇:https://qr18.cn/F05ZCM

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数HarmonyOS鸿蒙开发工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年HarmonyOS鸿蒙开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上HarmonyOS鸿蒙开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注鸿蒙获取)
img

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

ip204888 (备注鸿蒙获取)**
[外链图片转存中…(img-P60Qb6bX-1712642656359)]

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

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值