Android之 glide 框架 解读

Android之 glide 框架 解读,第1张

glide加载框架 其目的帮助我们在开发过程中对控件上的加载减压,它能够通过参数和方法加载 本地 网络 二进制等到控件上 还能够设置预加载以及加载出错时的错误提示,还能够对加载的进行缓存重复利用 可以缓存原始照片还能缓存经过压缩处理后的照片,能够缓存到内存,或者硬盘,甚至glide可以加载GIF动图还可以给加载的静态指定大小,对于 glide的缓存机制它用的是lru 这种缓存机制 其实就是 在一定缓存空间内把最近用的以及重复用的排列在最高级 将最不常用没有重复使用的排在最低级 当有新实例出现,缓存空间不够用的情况下就会把被打有最低级标志的实例释放掉。

前几篇传送门:

原文传送门:

正文:

在了解完的加载、显示、处理之后,接下来继续研究优化。成功、高效加载的基本特性之一就是利用缓存。在本文,我们将会了解Glide的缓存机制的基础部分。

在设计一款Android应用的时候,一个好用的加载框架应该尝试最小化网路请求的次数。Glide也一样,Glide默认通过内存和磁盘缓存来避免不必要的网络请求。在后续的文章中我们会具体看看其实现细节。如果你已经迫不及待,随时可以查看这个 官方文档 :

对于现在,重要的是,所有的请求都会在内存和磁盘上建立缓存。缓存通常都是非常有用的,然而在某些情况下又不希望它这么做。在下一节,我们将学习如何在一次请求中改变Glide的缓存策略。

如果你使用过Glide,你注意到根本不需要为开启缓存做额外的事,它自然而然就实现了。然而,如果你知道某张改变非常快,那么你应该要避免某些缓存。

Glide提供了一些方法来调整内存和磁盘缓存策略,让我们先来看看内存缓存。

我们假设一种非常简单的情形:从网络上加载一张到ImageView上:

你已经注意到我们这里使用 skipMemoryCache( true ) 来特地告诉Glide,让它跳过内存缓存。这意味着Glide不会将它放入到内存缓存当中。需要注意的是,这只是影响了内存缓存,Glide依然会使用磁盘缓存来避免额外的网络请求。

很容易理解的是,Glide是默认将所有的资源都加入到内存缓存中的。因此,没有必要专门去调用 skipMemoryCache( false ) 这个方法。

提示:要注意的是,对于同一个链接,如果你初次请求的时候没有调用 skipMemoryCache( true ) ,后面又调用了这个方法,那么它会被加入到内存缓存当中。当你想调整缓存策略的时候,确保你在请求同一个的时候保持策略统一。

基于你已经学习完上面的章节,你知道即使让 内存缓存 失效,请求依然会将存储在设备的磁盘上。如果你有一张,它指向同一个链接上,但是它改变得很快,那么你可能也不想让它存储在磁盘上。

你可以通过 diskCacheStrategy() 方法改变Glide的 磁盘缓存策略 。与 skipMemoryCache() 不同的是,它需要传入不同的枚举值,而不仅仅是布尔值。如果你想让磁盘缓存 失效 ,将 DiskCacheStrategyNONE 作为参入传入即可:

这样的话,这张的一点磁盘缓存都不会有。然而,它默认会使用 内存缓存 。为了让两个缓存都失效,把它俩组合一下就好:

我们前面已经提到了,对于磁盘缓存,Glide不止一个选项。在知道有哪些选项之前,你要明白磁盘缓存是相当复杂的东西。例如,Picasso只是缓存完整。然而,Glide的缓存不仅缓存原图、完整的还有额外一些缩小的。

例如,如果你请求一张是1000 x 1000像素,然后你的ImageView是500 x 500像素,那么Glide会将这两个尺寸都缓存起来。

现在你应该明白磁盘缓存策略 diskCacheStrategy() 中,不同的枚举参数之间的区别了:

作为最后一个例子,如果你有一张,你知道会经常修改它并且会有各种不同的版本,那么把它指定为仅缓存原图是很有意义的。因此,我们可以使用 DiskCacheStrategySOURCE 来告诉Glide仅缓存原图即可:

由于Glide对于同一张可以采取不一样的的缓存方式,想要简单的清除某张的缓存不是一件容易的事。你需要找到这张所有的变体,然后针对性地让那个缓存失效。

这是一个相当繁琐的步骤, 官方文档 里讲解得非常清楚。

在本文,你学习了Glide缓存的基础知识,并且知道如何调整缓存策略。基于你的需求,在后续的博文里,我们将回到这个话题讲解更多高级的优化。然而,这篇文章已经提供了非常有效的方法让你可以好好地利用Glide的缓存了。

下周,我们将看看 良好的用户体验的另一个关键点:优先请求!

优点

多样化媒体加载

Glide 不仅是一个缓存,它支持 Gif、WebP、缩略图。甚至是 Video

生命周期集成

通过设置绑定生命周期,我们可以更加高效的使用Glide提供的方式进行绑定,这样可以更好的让加载的请求的生命周期动态管理起来

高效的缓存策略

A 支持Memory和Disk缓存

B Picasso 只会缓存原始尺寸的,而 Glide 缓存的是多种规格,也就意味着 Glide 会根据你 ImageView 的大小来缓存相应大小的尺寸

比如你 ImageView 大小是200200,原图是 400400 ,而使用 Glide 就会缓存 200200 规格的图,而 Picasso 只会缓存 400400 规格的。这个改进就会导致 Glide 比 Picasso 加载的速度要快,毕竟少了每次裁剪重新渲染的过程,非常灵活 & 加载速度快

C 内存开销小

默认的 Bitmap 格式是 RGB_565 格式,而 Picasso 默认的是 ARGB_8888 格式,这个内存开销要小一半。

Android关于内存计算,共有四种,分别是:

ALPHA_8:每个像素占用1byte内存

ARGB_4444:每个像素占用2byte内存

ARGB_8888:每个像素占用4byte内存(默认,色彩最细腻=显示质量最高=占用的内存也最大)

RGB_565:每个像素占用2byte内存(8bit = 1byte)

举例说明:一个32位的PNG=ARGB_8888=1204x1024,那么占用空间是:1024x1024x(32/8) = 4,194,304kb=4M左右

在解析的时候,为了避免oom和节省内存,最好使用ARGB_4444模式(节省一半的内存空间)

42 缺点

使用方法复杂

由于Glide其功能强大,所以使用的方法非常多,其源码也相对的复杂

包较大

以上就是关于Android之 glide 框架 解读全部的内容,包括:Android之 glide 框架 解读、Glide-缓存基础(caching-basics)、glide优缺点等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10064233.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存