SuperAPI AI 工具集

coil-compose

通用与其它

查看项目

更新于 10-16 01:06

技能介绍

用途:在 Compose 与 Compose Multiplatform 项目中使用 Coil 3 加载图片时提供选型与性能参考。

主要能力与用法:Coil 3 完全支持多平台,AsyncImage、SubcomposeAsyncImage、rememberAsyncImagePainter 在 commonMain 中写法一致,无需 expect/actual。唯一需要替换的是上下文:使用 LocalPlatformContext.current,而非仅限 Android 的 LocalContext.current(在 commonMain 中会编译报错);前者在 Android 上解析为 android.content.Context,其他平台为 PlatformContext.INSTANCE。可在 commonMain 中使用 AsyncImage 并传入 ImageRequest.Builder(LocalPlatformContext.current) 构建请求。

单例配置:KMP 下可在应用生命周期早期调用 SingletonImageLoader.setSafe { ImageLoader.Builder(it).crossfade(true).build() },或显式传入 imageLoader。coil-compose 与 coil-compose-core 的区别:使用 coil-compose 时,AsyncImage 不传 imageLoader 会自动使用单例;使用 coil-compose-core 时 imageLoader 参数为必填,无单例便利。按需添加平台网络引擎,例如 KMP 可用 coil-network-ktor3。

性能注意点一:SubcomposeAsyncImage 明显慢于常规组合,切勿在 LazyColumn/LazyRow 中使用;它会为每个条目创建子组合,滚动时开销累积造成可见卡顿。列表中如需自定义加载/错误状态,改用带 placeholder/error 参数的 AsyncImage,视觉效果相同且无子组合。

性能注意点二:rememberAsyncImagePainter 不会根据布局约束推断显示尺寸,未显式调用 .size() 时会按原始尺寸加载图片,例如 4000×3000 照片以 64dp 显示仍占用完整位图内存,在 50 项列表中可能导致 OOM。仅当确实需要 Painter 时(Canvas、Icon 或自定义绘制)才使用它,并且必须传入 .size();其他情况用可自动调整尺寸的 AsyncImage。

限制:资料未提供基础用法(placeholder、error、contentDescription、共享 ImageLoader 等)、具体版本要求与更多配置细节。