您的位置:首页 > 其它

Glide入门教程——7. 缓存基础

2016-09-13 23:28 295 查看

Glide — 缓存基础

原文:Caching Basics

作者:Norman Peitek

翻译:Dexter0218

我们学习完了加载、显示和处理图片,我们将会向前推进学习优化处理。一个成功的高效的图片加载的基本功能是缓存。这篇文章将学习Glide中的缓存的基础知识。

文/签到钱就到(简书作者)

原文链接:http://www.jianshu.com/p/f5cc71c8eb3f
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

缓存基础

Android应用中一个较好的图片的处理加载,会最小化网络请求的消耗。Glide也是一样,默认使用内存和磁盘缓存来避免不必要的网络请求。我们将在后续的文章中详细介绍这些细节。如果你等不及,可以去浏览一下关于这个主题的官方文档

目前,重要的处理方式是所有的图片请求都会被缓存在内存和磁盘上。大多数情况下,缓存是一个非常有用的东西,但在一些特殊的情况下并不是很明智。在下一节中,我们会介绍如何为单独的请求调整Glide的缓存方式。

使用缓存的策略

如果你在前面用Glide用的很溜,你可能注意到你并不需要额外自己激活缓存。Glide本身自带缓存。然而,如果你的图片变化的非常快,你需要避免一些缓存。

Glide提供了一些方法去避免内存缓存和磁盘缓存。我们先看看内存缓存。

内存缓存

我们通过一个非常简单的请求:从网络加载一个图片到ImageView:

Glide
.with( context )
.load( eatFoodyImages[0] )
.skipMemoryCache( true )
.into( imageViewInternet );

你已经注意到我们调用了.skipMemoryCache( true )去特意告诉Glide跳过内存缓存。这意味着Glide不会把这个图片缓存到内存里。重要是,这个只影响内存缓存!Glide为了避免以后的网络请求,仍然会缓存到磁盘。

由于Glide默认会将所有的图片资源缓存到内存中,因此,没有必要手动调用.skipMemoryCache( false )了。

提示:注意到现实情况,如果你要对同一个URL做一个初始化的请求,第一次没使用.skipMemoryCache( true ),然后第二次使用了,将会获取缓存在内存中的资源。当你调整缓存行为的时候,确保请求的都是指向同一个资源,

跳过磁盘缓存

如上面所讲到的,即使你关闭了内存缓存,所请求的图片仍然会被保存在设备的磁盘存储上。如果你有一张不段变化的图片,但是都是用的同一个URL,你可能需要禁止磁盘缓存了。

你可以用.diskCacheStrategy()方法改变Glide的行为。不同于.skipMemoryCache()方法,它将需要从枚举型变量中选择一个,而不是一个简单的boolean。如果你想要禁止请求的磁盘缓存,使用枚举型变量DiskCacheStrategy.NONE作为参数。

Glide
.with( context )
.load( eatFoodyImages[0] )
.diskCacheStrategy( DiskCacheStrategy.NONE )
.into( imageViewInternet );

上面代码里的图片根本不会被保存在磁盘上。然后,默认情况下它仍然使用内存缓存!为了同时禁止掉两个缓存,结合一下方法:

Glide
.with( context )
.load( eatFoodyImages[0] )
.diskCacheStrategy( DiskCacheStrategy.NONE )
.skipMemoryCache( true )
.into( imageViewInternet );

自定义磁盘缓存行为

我们之前提到的,Glide有很多磁盘缓存的策略。在我们展示这些选项前,你可能意识到Glide的磁盘缓存是相当复杂的。例如,Picasso只缓存全尺寸图片。Glide,会缓存原始,全尺寸的图片和额外的小版本图片。例如,如果你请求一个1000x1000像素的图片,你的ImageView是500x500像素,Glide会保存两个版本的图片到缓存里。

现在,你应该明白.diskCacheStrategy()中枚举参数的意义了:

DiskCacheStrategy.NONE 啥也不缓存

DiskCacheStrategy.SOURCE 只缓存全尺寸图. 上面例子里的1000x1000像素的图片

DiskCacheStrategy.RESULT 只缓存最终降低分辨后用到的图片

DiskCacheStrategy.ALL 缓存所有类型的图片 (默认行为)

作为最后一个例子,如果你有一个图片你需要经常处理它,会生成各种不同的版本的图片,缓存它的原始的分辨率图片才有意义。这样,我们使用DiskCacheStrategy.SOURCE去告诉Glide只缓存原始版本:

Glide
.with( context )
.load( eatFoodyImages[2] )
.diskCacheStrategy( DiskCacheStrategy.SOURCE )
.into( imageViewFile );

单张图片的无效缓存

由于Glide缓存一张图片的多个版本分辨图片,并不好轻易从缓存中删除一个文件,你需要去找到所有这个图片可能有关系的缓存。这是一个相当复杂的处理,官方wiki在无效缓存上的指导非常棒。

展望

在这篇文章中,你已经学会了Glide的图片缓存工作是如何进行的,并且你也能够分辨哪个缓存方式是你需要的。后续的文章中,我们将围绕更多的优化中。

下一篇文章,我们将会学习另一个关于用户体验的关键部分,图片请求的优先级。

文/签到钱就到(简书作者)

原文链接:http://www.jianshu.com/p/f5cc71c8eb3f

著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐