Coil 默认会有一个 ImageLoader,设置的磁盘缓存文件路径为/data/data/<包名>/cache/image_cache/
如果要自定义,需要创建自己的ImageLoader
// image_manager_disk_cache 是 Glide 的默认缓存路径
ImageLoader.Builder(this).diskCache {
DiskCache.Builder()
.directory(this.cacheDir.resolve("image_manager_disk_cache"))
.maxSizePercent(0.02)
.build()
}.memoryCache {
MemoryCache.Builder(this)
.maxSizePercent(0.25)
.build()
}.build()
按照官方文档一般有两种使用方式
全局默认的需要在 APP 初始化的时候创建
特殊页面,使用单独的 ImageLoader,然后每个控件指定这个ImageLoader
1. APP 初始化时配置全局 ImageLoader
Application 实现ImageLoaderFactory
接口,重写newImageLoader
方法
class MyApplication:Application,ImageLoaderFactory{
override fun newImageLoader(): ImageLoader {
ImageLoader.Builder(this)./**TODO*/
}
}
或者可以在Application初始化的时候调用这样
Coil.setImageLoader(/**TODO*/)
2. 特殊页面初始化
// 设置 ImageLoader
class HomeworkDetailActivity : BaseComposeActivity() {
lateinit var fileIdImageLoader :ImageLoader
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
fileIdImageLoader = ImageLoader.Builder(this).diskCache {
DiskCache.Builder()
.directory(this.cacheDir.resolve("image_manager_disk_cache"))
.maxSizePercent(0.02)
.build()
}.memoryCache {
MemoryCache.Builder(this)
.maxSizePercent(0.25)
.build()
}.build()
}
3. 调用
context.imageLoader是全局的 ImageLoader, context可以使用
LocalContext.current
获取
特殊页面需要指定
SubcomposeAsyncImage(
modifier = modifier,
imageLoader = imageLoader,
model = getHomeworkRequest(LocalContext.current, fileId),
contentDescription = contentDescription,)