我在使用Coil设置Android Jetpack缓存的有效性时遇到了问题。
我的需求: 在Android Jetpack Compose中,我需要从URL下载SVG图像并将其存储到缓存中。但是缓存应仅在20秒内存储图像。因此,在这20秒内,不应有任何进一步的图像请求。在这20秒内,应该从缓存中显示图像。20秒后,我希望图像从缓存中清除。
我面临的问题是什么: 即使过了20秒,图像仍未从缓存中清除。我正在使用Jetpack Compose的Coil jetpack coil和 Jetpack Cachecontrol头文件。提前感谢您的帮助...
在Application类中,我创建了一个单例ImageLoader实例。
val imageLoader = ImageLoader.Builder(applicationContext)
.componentRegistry {
add(SvgDecoder(applicationContext))
}
.okHttpClient {
OkHttpClient.Builder()
.cache(CoilUtils.createDefaultCache(applicationContext))
.addNetworkInterceptor(provideCacheInterceptor(10))
.build()
}
.memoryCachePolicy(CachePolicy.DISABLED)
.diskCachePolicy(CachePolicy.ENABLED)
.build()
Coil.setImageLoader(imageLoader = imageLoader)
在 Moment.class 中:
val singleInstanceImageLoader = context.imageLoader
val imageRequest = ImageRequest.Builder(context)
.data(decodedURL)
.memoryCachePolicy(CachePolicy.DISABLED)
.diskCachePolicy(CachePolicy.ENABLED)
.addHeader("Cache-Control", "max-age=20,public")
.build()
val imagePainter = rememberCoilPainter(
request = imageRequest,
imageLoader = singleInstanceImageLoader
)
Image(
painter = imagePainter,
contentDescription = null,
modifier = Modifier
.wrapContentSize(Alignment.Center)
.padding(0.dp, 15.dp, 0.dp, 15.dp)
)