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:在内存缓存中预加载图像(有或没有磁盘缓存)的主要内容,如果未能解决你的问题,请参考以下文章