Glide:在内存缓存中预加载图像(有或没有磁盘缓存)

Posted

技术标签:

【中文标题】Glide:在内存缓存中预加载图像(有或没有磁盘缓存)【英文标题】:Glide: Preload images in memory cache (with or without disk cache) 【发布时间】:2021-01-17 11:49:06 【问题描述】:

我正在使用

glide.load(url)
     .diskCacheStrategy(DiskCacheStrategy.ALL)    
     .preload()

预加载图像。

但是,我需要它们在内存中,而不仅仅是在磁盘上,因此它可以更快地加载到 ImageView 中,就像我在将图像加载到 ImageView 一次后重新访问图像时那样。

我也试过

  glide.load(url)
       .diskCacheStrategy(DiskCacheStrategy.ALL)
       .into(PreloadTarget.obtain(glide, PreloadTarget.SIZE_ORIGINAL, PreloadTarget.SIZE_ORIGINAL))

运气不好。

PS:我访问过this question 和其他人,答案已经过时,因此这个问题。

【问题讨论】:

你确定是这样吗?使用 Glide 加载图像后,位图应该在内存中,考虑到它有一个内置的BitmapPool,如果从其他任何地方调用它,它会获取具有相同哈希的相同位图。调用相同的 URL 应该从位图池中获取位图,而不是从磁盘缓存中。 @FurkanYurdakul 我的观察是,如果我使用它预加载图像后,它会在几分之一秒内显示一个空的图像视图;对于已经在任何视图中加载的图像,情况并非如此。 这可能是因为 Glide 可能一直试图从后台线程加载位图本身,然后将位图放在主线程的目标上。您可能会遇到轻微的延迟,但不会造成大问题。如果你愿意,你可以为每个请求添加一个回调(我的意思是一个监听器),自己缓存它,如果请求相同,则直接从主线程加载它。 【参考方案1】:

参考this的文章可以将图片缓存在内存中然后使用

onlyRetrieveFromCache( true )

仅从内存中加载图像

【讨论】:

这使用磁盘缓存。它与内存缓存无关。

以上是关于Glide:在内存缓存中预加载图像(有或没有磁盘缓存)的主要内容,如果未能解决你的问题,请参考以下文章

Glide系列之缓存策略

Glide-图片的压缩

Glide简单使用

Android实战——Glide的使用,加载图片只要一句话

Android-Glide的缓存机制

使用 Glide v4 预加载图像不起作用