Android Coil自定义ImageView扩展函数缓存策略不生效问题
问题根因
封装的扩展函数中noCacheBuilder闭包写法错误,是缓存策略不生效的核心原因:
load方法要求传入的builder入参是ImageRequest.Builder的带接收者lambda,lambda执行时内部this已经指向load方法内部预创建好的、和当前ImageView绑定的请求构造器实例,配置需要直接调用这个实例的方法才会生效。- 原有代码在闭包中单独实例化了一个全新的
ImageRequest.Builder对象,所有缓存策略都配置在了这个和当前加载请求完全无关的独立对象上,既没有修改实际执行请求的构造器参数,也没有将新构造器的配置同步到真实加载流程,所有缓存配置等于无效代码。 - 额外错误:新建构造器时传入了
applicationContext,和ImageView持有的Context不匹配,即使后续将该构造器接入请求链,也可能引发Context相关的适配问题。
修正后的实现代码
fun ImageView.loadFromCache( data: Any? ): Disposable { val cacheConfig: ImageRequest.Builder.() -> Unit = { networkCachePolicy(CachePolicy.DISABLED) diskCachePolicy(CachePolicy.ENABLED) memoryCachePolicy(CachePolicy.ENABLED) } return load(data, builder = cacheConfig) }
修正后直接在lambda绑定的原有请求构造器上配置缓存规则,无需额外新建构造器实例,配置即可正常生效,实现仅加载内存、本地磁盘缓存中已存在的图片、禁止网络请求的需求。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

