首页编程caching?Glide-缓存基础(caching-basics)

caching?Glide-缓存基础(caching-basics)

编程之家2023-11-03101次浏览

尊敬的读者,caching和Glide-缓存基础(caching-basics)是当前备受关注的话题,但许多人对其仍存在疑惑。在本篇文章中,我将为你提供清晰的解释和深入的分析,希望能满足你的求知欲望。

caching?Glide-缓存基础(caching-basics)

PHCachingImageManager

对 Photos的图片或视频资源提供了加载或生成预览缩略图和全尺寸图片的方法,针对预处理巨量的资源进行了优化。

当你使用大量的资源时,一个缓存图片管理器可以在后台准备资源图片,为了能使你在稍后的事件请求单个资源时减少延迟。例如,当你想要使用照片或者视频资源的缩略图填充一个集合视图或者类似的页面时可以使用缓存图片管理器。

PHCachingImageManager类的大部分功能都是它的父类—— PHImageManager定义的.

如何使用缓存图片管理器:

为以后使用的资源准备图像。

当你调用这个方法, Photos会开始在后台获取图像数据并生成缩略图。在任何时间,你可以使用-(PHImageRequestID)requestImageForAsset:(PHAsset*)asset targetSize:(CGSize)targetSize contentMode:(PHImageContentMode)contentMode options:(PHImageRequestOptions*)options resultHandler:(void(^)(UIImage*result, NSDictionary*info))resultHandler;方法来请求已经缓存的单个图片。如果 Photos已经完成了缓存一组图片,这个方法会立刻提供已经缓存的图像。

caching?Glide-缓存基础(caching-basics)

Photos使用这个方法中你提供的 targetSize、 contentMode和 options来缓存图片。如果你在之后请求图片时,例如,使用不同的 targetSize调用这个方法, Photos都不会使用已经缓存的图片,而是获取或生成一个新的图片。

取消缓存给定的资源的图片。

这个方法通过给定的 options取消对给定的资源的图片缓存。当不再需要这些图片缓存的时候使用这个方法来取消缓存(有可能正在缓存过程中)。例如,如果你为使用缩略图填充一个集合视图而准备图像,这个时候用户选择了一个不同的缩略图尺寸,调用这个方法来取消之前生成的缩略图。

取消所有正在进行过程中的图像缓存。

@property(nonatomic, assign) BOOL allowsCachingHighQualityImages;

是否缓存高质量图片。

caching?Glide-缓存基础(caching-basics)

如果设置为 YES,图像管理器将会准备高质量的图像。这个选项将在高性能成本下提供更好的图像。

想要在准备大量的图像的时候有更快更好的性能——比如说用户快速的滑动缩略图集合视图的时候——设置这个属性为 NO。

Glide-缓存基础(caching-basics)

前几篇传送门:

原文传送门:

正文:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

geocaching是什么意思

geocaching的意思是:地理藏宝;地理寻宝。

geocaching是名词,意思是地理藏宝、地理寻宝;geocaching可以拆成“geo”和“caching”,geo在英文中有地理的意思,而caching则表示藏匿宝物的过程,两者连起来就是“地理藏宝”。

例句

1、Pack a picnic. Ride bikes. Go on a hike. Play Frisbee golf. Bird watch. Look for wildlife tracks. Trygeocaching. Play photographer.

在野外,你可以去野餐、骑自行车、徒步远足、玩飞盘高尔夫、观察鸟类,甚至还能寻找野生动物留下的痕迹,还能寻寻宝,摄影野外风光。

2、Geocaching, in many respects, was ahead of the location-based game.

在许多方面,处于地图定位游戏的领先位置。

非常感谢您的阅读!我们希望本文对于解决您关于caching和Glide-缓存基础(caching-basics)的问题提供了一些有价值的信息。如果您还有其他疑问,我们将很乐意为您提供进一步的帮助。

百度推广电话(百度广告推广电话)div 滚动条 怎么给div加滚动条