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

Posted

技术标签:

【中文标题】使用 Glide v4 预加载图像不起作用【英文标题】:Preloading Images with Glide v4 not working 【发布时间】: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! 【参考方案1】:

这是一个非常古老的问题,但无论如何:

您似乎在预加载时使用了签名,而不是在之后加载图像时使用了签名,因此它们不会命中缓存。

【讨论】:

以上是关于使用 Glide v4 预加载图像不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用 getDownloadURL() 从 firebase 存储加载图像不起作用

遇到引入的JS不起作用

计算图像加载进度不起作用

使用预加载图像以外的东西

使用SharpCifs和Decode从NAS加载图像不起作用

延迟加载图像在 iPhone 浏览器中不起作用