【发布时间】:2018-03-31 13:35:09
【问题描述】:
我正在尝试在应用启动时使用 Glide 将这些图像预加载和缓存到磁盘。我的预加载代码如下所示:
getAllImageUrls().forEach { url -> GlideApp.with(context)
.load(url)
.apply(RequestOptions().diskCacheStrategy(DiskCacheStrategy.ALL))
// request listener added for debug process
.listener(object: RequestListener<Drawable> {
override fun onLoadFailed(e: GlideException?, model: Any?, target: Target<Drawable>?, isFirstResource: Boolean): Boolean {
...
return true
}
override fun onResourceReady(resource: Drawable?, model: Any?, target: Target<Drawable>?, dataSource: DataSource?, isFirstResource: Boolean): Boolean {
// logging onResourceReady and data source here
return true
}
})
.signature(IntegerVersionSignature(version))
// preloads image into cache using original dimensions
.preload()}
要将图像加载到图像视图中,我的代码如下所示:
fun ImageView.loadImageFromUrl(imageUrl: String, activity: Activity, useCrossFade: Boolean = DEFAULT_CROSS_FADE_SETTING) {
GlideApp.with(activity).loadWithDefaultConfigInto(imageUrl, this, useCrossFade)}
private fun RequestManager.loadWithDefaultConfigInto(imageUrl: String, imageView: ImageView, useCrossFade: Boolean) {
val transitionOptions: DrawableTransitionOptions = if (useCrossFade) DrawableTransitionOptions.withCrossFade() else DrawableTransitionOptions().dontTransition()
this.load(imageUrl)
.apply(RequestOptions().diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY_GLIDE))
.transition(transitionOptions)
.into(imageView)
}
但显然图像的磁盘缓存不起作用。因为当我通过 Charles 检查网络请求时,我看到所有图像 url 都在应用程序启动时加载,但是当需要这些预加载图像时,应用程序会再次访问网络并第二次加载相同的图像 url,而不是在不同的屏幕上。
我需要做什么才能使预加载和磁盘缓存正常工作?
【问题讨论】:
-
您的设备内存不足吗?您的设备内部存储空间中剩余多少可用 GB!
标签: android android-glide preloading image-preloader