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

标签 android android-glide preloading image-preloader

我正在尝试在应用程序启动时使用 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()}

要将图像加载到 ImageView 中,我的代码如下所示:

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 第二次。

我需要做什么才能使预加载和磁盘缓存正常工作?

最佳答案

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

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

关于android - 使用 Glide v4 预加载图像不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46831157/

相关文章:

java - Android Firebase 数据库 limitToLast(1) 奇怪的行为

android - gradle构建时显示错误

java - 如何从url下载gif图像并保存到android中的存储

javascript - 预加载大量图像

php - 是否可以有一个持久的 PHP session 来更快地交付网页?

java - 包含两个 ListFragment 的 fragment

java - 使用 Ksoap2 从 Android 中的 Web 服务获取响应 header

android - Glide - 添加过渡交叉淡入淡出会导致占位符调整大小

java - 在创建 fragment 之前更改 fragment 时应用程序崩溃

objective-c - NSOperationQueue vs NSThread Priority——控制 NSOperationQueue 消耗多少 cpu