android 如何设置Coil从本地缓存(如果可用)获取图像,而不是从网络获取图像

bogh5gae  于 2022-12-25  发布在  Android
关注(0)|答案(1)|浏览(798)

我正在使用线圈版本“coil-compose:2.2.2”。

**问题:**我希望Coil在图像可用时从本地缓存填充图像,而不是从网络获取图像。
**当前行为:**目前Coil仅在没有互联网时检索本地缓存。
**预期行为:**我希望Coil即使在互联网可用时也使用本地缓存(如果存在)。并且仅当本地缓存不存在时,才从网络中获取。如何实现?

下面是我当前的实现:

ImageRequest.Builder(context)
.data(imageUrl)
.networkCachePolicy(CachePolicy.ENABLED)
.diskCachePolicy(CachePolicy.ENABLED)
.memoryCachePolicy(CachePolicy.ENABLED)
.diskCacheKey(imageUrl)
.memoryCacheKey(imageUrl)
.size(Size.ORIGINAL)
.build()
bxjv4tth

bxjv4tth1#

您尚未设置磁盘缓存,请改为设置。

ImageRequest.Builder(context)
    .data(imageUrl)
    .diskCache {
        DiskCache.Builder()
            .directory(context.cacheDir.resolve("image_cache"))
            .maxSizePercent(0.02)
            .build()
    }
    .size(Size.ORIGINAL)
    .build()

但是如果您有许多图像请求构建器,建议全局设置缓存,这样您就不需要在任何地方再次设置缓存。
打开MainApplication类,使用ImageLoaderFactory扩展它并覆盖方法newImageLoader

class MainApplication : Application(), ImageLoaderFactory {
    override fun newImageLoader(): ImageLoader {
        return ImageLoader.Builder(this)
            .diskCache {
                DiskCache.Builder()
                    .directory(context.cacheDir.resolve("image_cache"))
                    .maxSizePercent(0.02)
                    .build()
            }
            .build()
    }
}

参考文献:

  • 图像加载器-线圈|缓存
  • 入门-线圈|图像加载器

相关问题