更新日志
[3.5.0-beta01] - 2026年5月4日
- 移除
iosX64和macosX64目标。(#3386) - 将 Android 的最低 SDK 版本提升至 23。(#3283)
- 在 JS/WASM 上添加快速 WebP 尺寸提取,以避免回退到完整的 Skia 解码。(#3341)
- 修复
CacheStrategy实现无法刷新已缓存的失败响应(例如:已过期的404缓存响应)的问题。(#3401) - 更新编译 SDK 至 36。
- 更新 Kotlin 至 2.3.21。
- 更新 Compose 至 1.11.0-beta03。
- 更新 Okio 至 3.17.0。
- 更新 Skiko 至 0.144.5。
- 更新
androidx.annotation至 1.10.0。
[3.4.0] - 2026年2月24日
- 新增:添加
ConcurrentRequestStrategy以支持合并针对相同 key 的在途网络请求。(#2995, #3326)DeDupeConcurrentRequestStrategy可启用此行为,并让等待者等待在途网络请求的结果。- 此行为是实验性的,目前默认禁用。
- 目前,请求始终基于其
diskCacheKey进行合并。
OkHttpNetworkFetcherFactory、KtorNetworkFetcherFactory和NetworkFetcher.Factory现在接受concurrentRequestStrategy。
- 新增:在 JS/WASM 上使用 Web Worker 解码图像,以避免阻塞浏览器主线程。(#3305)
- 新增:为非 Compose 多平台构件添加对 Linux 原生目标(
linuxX64和linuxArm64)的支持。(#3054) - 新增:添加仅限 Compose 的 API,以改善后续请求之间的过渡。(#3141, #3175)
ImageRequest.Builder.useExistingImageAsPlaceholder允许在未设置占位符时,从前一个图像进行淡入淡出过渡。ImageRequest.Builder.preferEndFirstIntrinsicSize让CrossfadePainter优先使用结束绘制器的固有大小。
- 新增:在
coil-gif中添加ImageLoader.Builder.repeatCount(Int)以设置全局动画图像循环次数。(#3143) - 新增:在
coil-video中添加对优先使用嵌入视频缩略图的支持。(#3107) - 新增:随
coil-core发布coil-lint,并添加 lint 检查以捕获ImageRequest.Builder块中意外的kotlin.error()调用。(#3304) - 将 Kotlin 语言版本设置为 2.1。(#3302)
- 使
BitmapFetcher在公共代码中可用。(#3286) - 在 Android 上创建单例
ImageLoader时使用applicationContext。(#3246) - 默认缓存符合条件的非 2xx HTTP 响应(例如
404),并停止缓存不可缓存的响应(例如500)。(#3137, #3139) - 修复消耗 OkHttp 响应体时潜在的竞态条件。(#3186)
- 修复
maxBitmapSize边缘情况,以防止 Android 上出现超大位图崩溃。(#3259) - 更新 Kotlin 至 2.3.10。
- 更新 Compose 至 1.9.3。
- 更新 Okio 至 3.16.4。
- 更新 Skiko 至 0.9.22.2。
- 更新
kotlinx-io-okio至 0.9.0。 - 更新
androidx.core至 1.16.0。 - 更新
androidx.lifecycle至 2.9.4。 - 更新
androidx.exifinterface至 1.4.2。
[3.3.0] - 2025年7月22日
- 新增:引入一个新 API,用于在应用处于后台时限制 Android 上的
MemoryCache.maxSize。- 如果设置了
ImageLoader.Builder.memoryCacheMaxSizePercentWhileInBackground,则当应用处于后台时,ImageLoader的内存缓存将被限制为其最大大小的百分比。此设置目前默认禁用。 - 当应用切换到后台时,图像将从内存缓存中修剪以达到受限的最大大小,但内存缓存对最近修剪图像的弱引用不受影响。这意味着如果图像当前在其他地方被引用(例如
AsyncImage、ImageView等),它仍将存在于内存缓存中。 - 此 API 对于减少后台内存使用、防止应用过早被杀以及帮助减轻用户设备上的内存压力非常有用。
- 如果设置了
- 新增:向
SvgDecoder添加Svg.Parser参数。- 如果默认 SVG 解析器不满足您的需求,这允许使用自定义 SVG 解析器。
- 向
SvgDecoder添加density参数以支持提供自定义密度乘数。 - 添加
Uri.Builder以支持复制和修改Uri。 - 添加
ImageLoader.Builder.mainCoroutineContext以支持在测试中重写 Coil 对Dispatchers.main.immediate的使用。 - 修复在动画结束时
start图像被取消引用导致CrossfadePainter.intrinsicSize发生变化的问题。这与CrossfadeDrawable的行为一致。 - 修复 Java 无法访问
ImageLoaders.executeBlocking的问题。 - 在
coil-network-ktor3中使用kotlinx.io的 Okio 互操作模块。 - 更新
kotlinx-datetime至0.7.1。- 此版本包含二进制不兼容的更改,仅影响
coil-network-cache-control模块。有关更多信息,请参阅此处。
- 此版本包含二进制不兼容的更改,仅影响
- 更新 Kotlin 至 2.2.0。
- 更新 Compose 至 1.8.2。
- 更新 Okio 至 3.15.0。
- 更新 Skiko 至 0.9.4.2。
[3.2.0] - 2025年5月13日
自 3.1.0 以来的变更:
- 重要:由于 Compose
1.8.0的要求,coil-compose和coil-compose-core现在需要 Java 11 字节码。有关如何启用它,请参阅此处。 - 将
AsyncImagePreviewHandler的函数式构造函数更改为返回AsyncImagePainter.State.Success而不是AsyncImagePainter.State.Loading。 - 修复
ConstraintsSizeResolver#size()中的取消问题。 - 修复使用 R8 构建时缺少
PlatformContext的警告。 - 修复当返回默认
FakeImageLoaderEngine响应时FakeImageLoaderEngine未设置Transition.Factory.NONE的问题。 - 移除
ColorImage的实验性注解。 - 在
CacheControlCacheStrategy中延迟解析网络标头。 - 重构
CircleCropTransformation和RoundedCornersTransformation以共享公共代码。 - 如果
ExifOrientationStrategy不是RESPECT_PERFORMANCE,则内部回退到使用BitmapFactory。 - 更新 Kotlin 至 2.1.20。
- 更新 Compose 至 1.8.0。
- 更新 Okio 至 3.11.0。
- 更新 Skiko 至 0.9.4。
- 更新 Coroutines 至 1.10.2。
- 更新
accompanist-drawablepainter至 0.37.3。
自 3.2.0-rc02 以来的变更:
- 如果
ExifOrientationStrategy不是RESPECT_PERFORMANCE,则内部回退到使用BitmapFactory。 - 更新 Compose 至 1.8.0。
- 更新
accompanist-drawablepainter至 0.37.3。
[3.2.0-rc02] - 2025年4月26日
- 修复在非 JVM 目标上使用
KtorNetworkFetcherFactory(Ktor 3) 加载图像时,图像请求因ClosedByteChannelException而失败的问题。
[3.2.0-rc01] - 2025年4月24日
- 重要:由于 Compose
1.8.0的要求,coil-compose和coil-compose-core现在需要 Java 11 字节码。有关如何启用它,请参阅此处。 - 将
AsyncImagePreviewHandler的函数式构造函数更改为返回AsyncImagePainter.State.Success而不是AsyncImagePainter.State.Loading。 - 修复
ConstraintsSizeResolver#size()中的取消问题。 - 修复使用 R8 构建时缺少
PlatformContext的警告。 - 修复当返回默认
FakeImageLoaderEngine响应时FakeImageLoaderEngine未设置Transition.Factory.NONE的问题。 - 移除
ColorImage的实验性注解。 - 在
CacheControlCacheStrategy中延迟解析网络标头。 - 重构
CircleCropTransformation和RoundedCornersTransformation以共享公共代码。 - 在
coil-network-ktor2和coil-network-ktor3中使用kotlinx.io的 Okio 互操作模块。 - 更新 Kotlin 至 2.1.20。
- 更新 Compose 至 1.8.0-rc01。
- 更新 Okio 至 3.11.0。
- 更新 Skiko 至 0.9.4。
- 更新 Coroutines 至 1.10.2。
[3.1.0] - 2025年2月4日
- 提升
AsyncImage性能。- 取决于可组合项是被实例化还是被重用,运行时性能提升了 25% 到 40%。内存分配也减少了 35% 到 48%。更多信息请参阅此处。
- 添加
ColorImage并弃用FakeImage。ColorImage对于在测试和预览中返回假值非常有用。它解决了与FakeImage相同的用例,但在coil-core中比在coil-test中更容易访问。
- 移除
coil-compose-core对Dispatchers.Main.immedate的依赖。- 这也修复了在 Paparazzi 和 Roborazzi 屏幕截图测试中
AsyncImagePainter不会同步执行ImageRequest的情况。
- 这也修复了在 Paparazzi 和 Roborazzi 屏幕截图测试中
- 添加对格式为
data:[<mediatype>][;base64],<data>的 data URIs 的支持。 - 添加
AnimatedImageDecoder.ENCODED_LOOP_COUNT以支持使用 GIF 元数据中编码的循环次数。 - 向
NetworkRequest添加Extras以支持自定义扩展。 - 添加
DiskCache.Builder.cleanupCoroutineContext并弃用DiskCache.Builder.cleanupDispatcher。 - 添加
ImageLoader.Builder.imageDecoderEnabled以在 API 29 及更高版本上可选地禁用android.graphics.ImageDecoder。 - 如果没有为
ImageRequest的数据类型注册Keyer,则记录警告。 - 使
CrossfadePainter公开。 - 在所有多平台目标上支持
Transformation。 - 在
CacheControlCacheStrategy中支持 0 作为Expires标头值。 - 修复当
AsyncImage/SubcomposeAsyncImage/rememberAsyncImage的ContentScale在None与其他值之间切换时,不会启动新ImageRequest的问题。 - 更新 Kotlin 至 2.1.10。
- 注意:由于 LLVM 更新,如果您使用 Kotlin native,此版本要求使用 Kotlin 2.1.0 或更高版本进行编译。
- 更新 Compose 至 1.7.3。
- 更新
androidx.core至 1.15.0。
[3.0.4] - 2024年11月25日
- 修复矢量可绘制对象在 Android Studio 预览中不渲染的问题。
- 修复尺寸超过
maxBitmapSize的请求可能出现内存缓存未命中的问题。 - 修复
FakeImage在 Android 上不渲染的问题。 - 修复在使用
AsyncImage/rememberAsyncImagePainter/SubcomposeAsyncImage时,如果请求的Transformation发生变化,则不启动新图像请求的问题。 - 修复
ScaleDrawable和CrossfadeDrawable不遵循着色(tint)状态的问题。 - 允许
ImageDecoder解码部分图像源。这与BitmapFactory中的行为一致。 - 修复解码后未调用
Bitmap.prepareToDraw()的问题。 SvgDecoder不应为非光栅化图像返回isSampled = true。- 如果即时主调度器不可用,在 Compose 中回退到使用
Dispatchers.Unconfined。这仅用于预览/测试环境。 - 将 Ktor 2 更新至
2.3.13。
[3.0.3] - 2024年11月14日
- 修复基于
ImageView的ScaleType设置ImageRequest.scale的问题。 - 修复
DiskCache在删除文件后无法跟踪条目移除的边缘情况。 - 在记录错误时将 throwable 传递给
Logger。 - 不要用
kotlin-stdlib替换kotlin-stdlib-jdk7和kotlin-stdlib-jdk8。
[3.0.2] - 2024年11月9日
- 修复在 Android 上使用自定义
CacheStrategy调用OkHttpNetworkFetcherFactory时发生崩溃的问题。 - 修复
CacheControlCacheStrategy计算缓存条目寿命不正确的问题。 - 修复在 API >= 28 上,只有当
ImageRequest.bitmapConfig为ARGB_8888或HARDWARE时才会生效的情况。
[3.0.1] - 2024年11月7日
- 修复使用硬件位图支持的
BitmapImage调用Image.toBitmap时发生崩溃的问题。 - 修复
AsyncImageModelEqualityDelegate.Default对 non-ImageRequest模型进行不正确的相等性比较的问题。
[3.0.0] - 2024年11月4日
Coil 3.0.0 是 Coil 的下一个主要版本,全面支持 Compose Multiplatform。
有关 3.0.0 中改进和重要变更的完整列表,请查看升级指南。
自 3.0.0-rc02 以来的变更:
- 移除剩余的已弃用方法。
[3.0.0-rc02] - 2024年10月28日
有关 3.x 中改进和重要变更的完整列表,请查看升级指南。自 3.0.0-rc01 以来的变更:
- 添加
BlackholeDecoder。这简化了仅限磁盘缓存的预加载。 - 为
ConstraintsSizeResolver和DrawScopeSizeResolver添加remember函数。 - 移除
EqualityDelegate作为AsyncImage的参数。相反,它应该通过LocalAsyncImageModelEqualityDelegate设置。 - 修复当父可组合项使用
IntrinsicSize时AsyncImage不渲染的问题。 - 修复当
AsyncImagePainter没有子绘制器时AsyncImage填充可用约束的问题。 - 修复因
EqualityDelegate被忽略导致其状态被观察时rememberAsyncImagePainter无限重组的问题。 - 修复解析带有特殊字符的
File/Path路径的问题。 - 修复在
VideoFrameDecoder中使用自定义FileSystem实现的问题。 - 更新 Ktor 至
3.0.0。 - 更新
androidx.annotation至1.9.0。
[3.0.0-rc01] - 2024年10月8日
有关 3.x 中改进和重要变更的完整列表,请查看升级指南。自 3.0.0-alpha10 以来的变更:
- 破坏性变更:默认禁用
addLastModifiedToFileCacheKey并允许按请求设置。可以使用相同的标志重新启用该行为。 - 新增:引入新的
coil-network-cache-control构件,该构件实现了对Cache-Control标头的支持。 - 新增:向
SvgDecoder.Factory添加scaleToDensity属性。此属性确保具有固有维度的 SVG 乘以设备密度(仅在 Android 上支持)。 - 将
ExifOrientationPolicy重命名为ExifOrientationStrategy。 - 在 get 时从
MemoryCache中移除不可共享的图像。 - 使
ConstraintsSizeResolver公开。 - 稳定
setSingletonImageLoaderFactory。 - 在
coil-network-ktor3中恢复优化的 JVM I/O 函数。 - 将
pdf添加到 MIME 类型列表。 - 将编译 SDK 更新至 35。
- 更新 Kotlin 至 2.0.20。
- 更新 Okio 至 3.9.1。
[3.0.0-alpha10] - 2024年8月7日
- 破坏性变更:将
ImageLoader.Builder.networkObserverEnabled替换为NetworkFetcher的ConnectivityChecker接口。- 要禁用网络观察程序,请将
ConnectivityChecker.ONLINE传递给KtorNetworkFetcherFactory/OkHttpNetworkFetcherFactory的构造函数。
- 要禁用网络观察程序,请将
- 新增:支持在所有平台上加载 Compose Multiplatform 资源。要加载资源,请使用
Res.getUri:
kotlin
AsyncImage(
model = Res.getUri("drawable/image.jpg"),
contentDescription = null,
)- 向
ImageLoader和ImageRequest添加maxBitmapSize属性。- 此属性默认为 4096x4096,并为分配的位图维度提供安全的上限。这有助于防止意外使用
Size.ORIGINAL加载非常大的图像并导致内存溢出异常。
- 此属性默认为 4096x4096,并为分配的位图维度提供安全的上限。这有助于防止意外使用
- 将
ExifOrientationPolicy转换为接口以支持自定义策略。 - 修复
Uri对 Windows 文件路径的处理。 - 从
ImageAPI 中移除@ExperimentalCoilApi。 - 更新 Kotlin 至 2.0.10。
[3.0.0-alpha09] - 2024年7月23日
- 破坏性变更:将
io.coil-kt.coil3:coil-network-ktor构件重命名为io.coil-kt.coil3:coil-network-ktor2,它依赖于 Ktor 2.x。此外,引入依赖于 Ktor 3.x 的io.coil-kt.coil3:coil-network-ktor3。wasmJs支持仅在 Ktor 3.x 中可用。 - 新增:添加
AsyncImagePainter.restart()以手动重启图像请求。 - 从
NetworkClient及相关类中移除@ExperimentalCoilApi。 - 优化
ImageRequest以避免不必要的Extras和Map分配。
[2.7.0] - 2024年7月17日
- 略微优化内部协程使用,以提高
ImageLoader.execute、AsyncImage、SubcomposeAsyncImage和rememberAsyncImagePainter的性能。(#2205) - 修复分块响应的重复网络调用。(#2363)
- 更新 Kotlin 至 2.0.0。
- 更新 Compose UI 至 1.6.8。
- 更新 Okio 至 3.9.0。
[3.0.0-alpha08] - 2024年7月8日
- 破坏性变更:将
ImageRequest和ImageLoader的dispatcher方法重命名为coroutineContext。例如,ImageRequest.Builder.dispatcher现在是ImageRequest.Builder.coroutineContext。重命名是因为该方法现在接受任何CoroutineContext而不再要求是Dispatcher。 - 修复:修复可能由于竞态条件而发生的
IllegalStateException: Reading a state that was created after the snapshot was taken or in a snapshot that has not yet been applied。- 注意:这重新引入了对
Dispatchers.Main.immediate的软依赖。因此,您应该在 JVM 上重新添加对kotlinx-coroutines-swing的依赖。如果未导入,则ImageRequest不会被立即调度,并且在设置ImageRequest.placeholder或从内存缓存解析之前将有一帧延迟。
- 注意:这重新引入了对
[3.0.0-alpha07] - 2024年6月26日
- 破坏性变更:
AsyncImagePainter默认不再等待onDraw,而是使用Size.ORIGINAL。- 这修复了与 Roborazzi/Paparazzi 的兼容性问题,并整体提高了测试可靠性。
- 要恢复到等待
onDraw,请将DrawScopeSizeResolver设置为您的ImageRequest.sizeResolver。
- 破坏性变更:重构多平台
ImageAPI。值得注意的是,asCoilImage已重命名为asImage。 - 破坏性变更:
AsyncImagePainter.state已更改为StateFlow<AsyncImagePainter.State>。使用collectAsState来观察其值。这提升了性能。 - 破坏性变更:
AsyncImagePainter.imageLoader和AsyncImagePainter.request已合并为StateFlow<AsyncImagePainter.Inputs>。使用collectAsState来观察其值。这提升了性能。 - 破坏性变更:移除对
android.resource://example.package.name/drawable/imageURI 的支持,因为它会阻碍资源收缩(shrinking)优化。- 如果您仍需要其功能,可以在组件注册表中手动包含
ResourceUriMapper。
- 如果您仍需要其功能,可以在组件注册表中手动包含
- 新增:引入
AsyncImagePreviewHandler以支持控制AsyncImagePainter的预览渲染行为。- 使用
LocalAsyncImagePreviewHandler重写预览行为。 - 作为此更改和其他
coil-compose改进的一部分,AsyncImagePainter现在默认尝试执行ImageRequest,而不是默认显示ImageRequest.placeholder。在预览环境中,使用网络或文件的请求预计会失败,但 Android 资源应该可以工作。
- 使用
- 新增:支持按帧索引提取视频图像。(#2183)
- 新增:支持向任何
CoroutineDispatcher方法传递CoroutineContext。(#2241)。 - 新增:在 JS 和 WASM JS 上支持弱引用内存缓存。
- 在 Compose 中不调度到
Dispatchers.Main.immediate。作为副作用,在 JVM 上不再需要导入kotlinx-coroutines-swing。 - 在 Compose 中不调用
async也不创建 disposable 以提高性能(感谢 @mlykotom!)。(#2205) - 修复将全局
ImageLoaderextras 传递给Options的问题。(#2223) - 修复
crossfade(false)在非 Android 目标上不起作用的问题。 - 修复 VP8X 功能标志字节偏移 (#2199)。
- 将非 Android 目标上的
SvgDecoder转换为渲染到位图,而不是在绘制时渲染图像。这提升了性能。- 此行为可以使用
SvgDecoder(renderToBitmap)进行控制。
- 此行为可以使用
- 将
ScaleDrawable从coil-gif移动到coil-core。 - 更新 Kotlin 至 2.0.0。
- 更新 Compose 至 1.6.11。
- 更新 Okio 至 3.9.0。
- 更新 Skiko 至 0.8.4。
- 有关 3.x 中重要变更的完整列表,请查看升级指南。
[3.0.0-alpha06] - 2024年2月29日
- 将 Skiko 降级至 0.7.93。
- 有关 3.x 中重要变更的完整列表,请查看升级指南。
[3.0.0-alpha05] - 2024年2月28日
- 新增:支持
wasmJs目标。 - 创建
DrawablePainter和DrawableImage以支持在非 Android 平台上绘制不以位图为后端的Image。ImageAPI 是实验性的,在 alpha 版本之间可能会发生变化。
- 更新
ContentPainterModifier以实现Modifier.Node。 - 修复:在后台线程上延迟注册组件回调和网络观察程序。这修复了通常在主线程上发生的初始化缓慢问题。
- 修复:修复
ImageLoader.Builder.placeholder/error/fallback未被ImageRequest使用的问题。 - 更新 Compose 至 1.6.0。
- 更新 Coroutines 至 1.8.0。
- 更新 Okio 至 3.8.0。
- 更新 Skiko 至 0.7.94。
- 有关 3.x 中重要变更的完整列表,请查看升级指南。
[2.6.0] - 2024年2月23日
- 使
rememberAsyncImagePainter、AsyncImage和SubcomposeAsyncImage可重启且可跳过。这通过避免重组(除非可组合项的参数之一发生变化)来提高性能。- 向
rememberAsyncImagePainter、AsyncImage和SubcomposeAsyncImage添加可选的modelEqualityDelegate参数,以控制model是否会触发重组。
- 向
- 更新
ContentPainterModifier以实现Modifier.Node。 - 修复:在后台线程上延迟注册组件回调和网络观察程序。这修复了通常在主线程上发生的初始化缓慢问题。
- 修复:如果
ImageRequest.listener或ImageRequest.target发生变化,避免在rememberAsyncImagePainter、AsyncImage和SubcomposeAsyncImage中重新启动新的图像请求。 - 修复:不要在
AsyncImagePainter中观察图像请求两次。 - 更新 Kotlin 至 1.9.22。
- 更新 Compose 至 1.6.1。
- 更新 Okio 至 3.8.0。
- 更新
androidx.collection至 1.4.0。 - 更新
androidx.lifecycle至 2.7.0。
[3.0.0-alpha04] - 2024年2月1日
- 破坏性变更:从
OkHttpNetworkFetcherFactory和KtorNetworkFetcherFactory的公开 API 中移除Lazy。 - 在
OkHttpNetworkFetcherFactory中暴露Call.Factory而不是OkHttpClient。 - 将
NetworkResponseBody转换为包装ByteString。 - 将 Compose 降级至 1.5.12。
- 有关重要变更的完整列表,请查看升级指南。
[3.0.0-alpha03] - 2024年1月20日
- 破坏性变更:
coil-network已重命名为coil-network-ktor。此外,新增了一个依赖于 OkHttp 且不需要指定 Ktor 引擎的coil-network-okhttp构件。- 取决于您导入的构件,您可以使用
KtorNetworkFetcherFactory或OkHttpNetworkFetcherFactory手动引用Fetcher.Factory。
- 取决于您导入的构件,您可以使用
- 支持在 Apple 平台上加载
NSUrl。 - 向
AsyncImage添加clipToBounds参数。 - 有关重要变更的完整列表,请查看升级指南。
[3.0.0-alpha02] - 2024年1月10日
- 破坏性变更:更新了
coil-gif、coil-network、coil-svg和coil-video的软件包,使其所有类分别属于coil.gif、coil.network、coil.svg和coil.video。这有助于避免与其他构件的类名冲突。 - 破坏性变更:将
ImageDecoderDecoder重命名为AnimatedImageDecoder。 - 新增:
coil-gif、coil-network、coil-svg和coil-video的组件现在会自动添加到每个ImageLoader的ComponentRegistry中。- 明确一点,与
3.0.0-alpha01不同,您不需要手动将NetworkFetcher.Factory()添加到您的ComponentRegistry中。只需导入io.coil-kt.coil3:coil-network:[version]和一个 Ktor 引擎就足以加载网络图像。 - 手动将这些组件添加到
ComponentRegistry也是安全的。任何手动添加的组件都优先于自动添加的组件。 - 如果需要,可以使用
ImageLoader.Builder.serviceLoaderEnabled(false)禁用此行为。
- 明确一点,与
- 新增:在所有平台上支持
coil-svg。它在 Android 上由 AndroidSVG 支持,在非 Android 平台上由 SVGDOM 支持。 - Coil 现在内部使用 Android 的
ImageDecoderAPI,当直接从文件、资源或内容 URI 解码时具有性能优势。 - 修复:多个
coil3.Uri解析修复。 - 有关重要变更的完整列表,请查看升级指南。
[3.0.0-alpha01] - 2023年12月30日
- 新增:Compose Multiplatform 支持。Coil 现在是一个支持 Android、JVM、iOS、macOS 和 Javascript 的 Kotlin 多平台库。
- Coil 的 Maven 坐标已更新为
io.coil-kt.coil3,其导入已更新为coil3。这允许 Coil 3 与 Coil 2 并行运行而不会出现二进制兼容性问题。例如,io.coil-kt:coil:[version]现在是io.coil-kt.coil3:coil:[version]。 coil-base和coil-compose-base构件分别重命名为coil-core和coil-compose-core,以符合 Coroutines、Ktor 和 AndroidX 使用的命名约定。- 有关重要变更的完整列表,请查看升级指南。
[2.5.0] - 2023年10月30日
- 新增:添加
MediaDataSourceFetcher.Factory以支持在coil-video中解码MediaDataSource实现。(#1795) - 将
SHIFT6m设备添加到硬件位图黑名单。(#1812) - 修复:防范返回具有一个无界维度的尺寸的绘制器。(#1826)
- 修复:当缓存标头包含非 ASCII 字符时,
304 Not Modified之后磁盘缓存加载失败的问题。(#1839) - 修复:
FakeImageEngine未更新拦截器链请求的问题。(#1905) - 更新编译 SDK 至 34。
- 更新 Kotlin 至 1.9.10。
- 更新 Coroutines 至 1.7.3。
- 更新
accompanist-drawablepainter至 0.32.0。 - 更新
androidx.annotation至 1.7.0。 - 更新
androidx.compose.foundation至 1.5.4。 - 更新
androidx.core至 1.12.0。 - 更新
androidx.exifinterface:exifinterface至 1.3.6。 - 更新
androidx.lifecycle至 2.6.2。 - 更新
com.squareup.okhttp3至 4.12.0。 - 更新
com.squareup.okio至 3.6.0。
[2.4.0] - 2023年5月21日
- 将
DiskCache的get/edit重命名为openSnapshot/openEditor。 - 在
AsyncImagePainter中不要自动将ColorDrawable转换为ColorPainter。 - 使用
@NonRestartableComposable注解简单的AsyncImage重载。 - 修复:在
ImageSource中延迟调用Context.cacheDir。 - 修复:修复发布
coil-bom的问题。 - 修复:修复在禁用硬件位图的情况下始终将位图配置设置为
ARGB_8888的问题。 - 更新 Kotlin 至 1.8.21。
- 更新 Coroutines 至 1.7.1。
- 更新
accompanist-drawablepainter至 0.30.1。 - 更新
androidx.compose.foundation至 1.4.3。 - 更新
androidx.profileinstaller:profileinstaller至 1.3.1。 - 更新
com.squareup.okhttp3至 4.11.0。
[2.3.0] - 2023年3月25日
- 新增:引入新的
coil-test构件,其中包含FakeImageLoaderEngine。此类对于硬编码图像加载器响应非常有用,以确保测试中响应的一致性和同步性(从主线程)。有关更多信息,请参阅此处。 - 新增:向
coil-base(coil的子模块)和coil-compose-base(coil-compose的子模块)添加基准配置文件 (baseline profiles)。- 这提升了 Coil 的运行时性能,并应根据应用中 Coil 的使用方式提供更好的帧时间。
- 修复:修复解析带有编码数据的
file://URI 的问题。#1601 - 修复:如果传递的目录不存在,
DiskCache现在可以正确计算其最大大小。#1620 - 使
Coil.reset成为公开 API。#1506 - 启用 Java 默认方法生成。#1491
- 更新 Kotlin 至 1.8.10。
- 更新
accompanist-drawablepainter至 0.30.0。 - 更新
androidx.annotation至 1.6.0。 - 更新
androidx.appcompat:appcompat-resources至 1.6.1。 - 更新
androidx.compose.foundation至 1.4.0。 - 更新
androidx.core至 1.9.0。 - 更新
androidx.exifinterface:exifinterface至 1.3.6。 - 更新
androidx.lifecycle至 2.6.1。 - 更新
okio至 3.3.0。
[2.2.2] - 2022年10月1日
- 确保图像加载器在注册其系统回调之前已完全初始化。#1465
- 在 API 30+ 上的
VideoFrameDecoder中设置首选位图配置以避免色带问题。#1487 - 修复
FileUriMapper中解析包含#的路径的问题。#1466 - 修复从磁盘缓存中读取带有非 ASCII 标头的响应的问题。#1468
- 修复解码资产子文件夹内的视频的问题。#1489
- 更新
androidx.annotation至 1.5.0。
[2.2.1] - 2022年9月8日
- 修复:
RoundedCornersTransformation现在可以正确缩放input位图。 - 移除对
kotlin-parcelize插件的依赖。 - 将编译 SDK 更新至 33。
- 将
androidx.appcompat:appcompat-resources降级至 1.4.2 以解决 #1423。
[2.2.0] - 2022年8月16日
- 新增:向
coil-video添加ImageRequest.videoFramePercent,以支持将视频帧指定为视频时长的百分比。 - 新增:添加
ExifOrientationPolicy以配置BitmapFactoryDecoder如何处理 EXIF 方向数据。 - 修复:如果传递了具有未定义维度的尺寸,则在
RoundedCornersTransformation中不抛出异常。 - 修复:将 GIF 的帧延迟读取为两个无符号字节而不是一个有符号字节。
- 更新 Kotlin 至 1.7.10。
- 更新 Coroutines 至 1.6.4。
- 更新 Compose 至 1.2.1。
- 更新 OkHttp 至 4.10.0。
- 更新 Okio 至 3.2.0。
- 更新
accompanist-drawablepainter至 0.25.1。 - 更新
androidx.annotation至 1.4.0。 - 更新
androidx.appcompat:appcompat-resources至 1.5.0。 - 更新
androidx.core至 1.8.0。
[2.1.0] - 2022年5月17日
- 新增:支持加载
ByteArray。(#1202) - 新增:支持使用
ImageRequest.Builder.css为 SVG 设置自定义 CSS 规则。(#1210) - 修复:将
GenericViewTarget的私有方法转换为受保护方法。(#1273) - 将编译 SDK 更新至 32。(#1268)
[2.0.0] - 2022年5月10日
Coil 2.0.0 是该库的一次重大迭代,包含破坏性变更。有关如何升级,请查看升级指南。
- 新增:在
coil-compose中引入AsyncImage。有关更多信息,请查看文档。
kotlin
// 显示来自网络的图像。
AsyncImage(
model = "https://example.com/image.jpg",
contentDescription = null,
)
// 显示来自网络的图像,带有占位符、圆形裁剪和淡入淡出动画。
AsyncImage(
model = ImageRequest.Builder(LocalContext.current)
.data("https://example.com/image.jpg")
.crossfade(true)
.build(),
placeholder = painterResource(R.drawable.placeholder),
contentDescription = stringResource(R.string.description),
contentScale = ContentScale.Crop,
modifier = Modifier.clip(CircleShape)
)- 新增:引入公开的
DiskCacheAPI。- 使用
ImageLoader.Builder.diskCache和DiskCache.Builder配置磁盘缓存。 - 您不应在 Coil 2.0 中使用 OkHttp 的
Cache。有关更多信息,请参阅此处。 - 仍支持
Cache-Control和其他缓存标头——除了Vary标头,因为缓存仅检查 URL 是否匹配。此外,仅缓存响应代码在 [200..300) 范围内的响应。 - 升级到 2.0 时将清除现有的磁盘缓存。
- 使用
- 最低支持的 API 现在为 21。
ImageRequest的默认Scale现在为Scale.FIT。- 更改此设置是为了使
ImageRequest.scale与具有默认Scale的其他类保持一致。 - 带有
ImageViewTarget的请求仍会自动检测其Scale。
- 更改此设置是为了使
- 重新设计图像流水线类:
Mapper、Fetcher和Decoder已重构为更加灵活。Fetcher.key已替换为新的Keyer接口。Keyer根据输入数据创建缓存键。- 添加
ImageSource,允许Decoder使用 Okio 的文件系统 API 直接读取File。
- 重新设计 Jetpack Compose 集成:
rememberImagePainter和ImagePainter分别重命名为rememberAsyncImagePainter和AsyncImagePainter。- 弃用
LocalImageLoader。有关更多信息,请查看弃用消息。
- 禁用生成运行时非空断言。
- 如果您使用 Java,将 null 作为带有非空注解的参数传递给函数将不再立即抛出
NullPointerException。Kotlin 的编译时空安全可防止这种情况发生。 - 此更改允许库的大小更小。
- 如果您使用 Java,将 null 作为带有非空注解的参数传递给函数将不再立即抛出
Size现在由其宽度和高度的两个Dimension值组成。Dimension可以是正像素值或Dimension.Undefined。有关更多信息,请参阅此处。- 从库中移除了
BitmapPool和PoolableViewTarget。 - 从库中移除了
VideoFrameFileFetcher和VideoFrameUriFetcher。请改用支持所有数据源的VideoFrameDecoder。 - 从库中移除了
BlurTransformation和GrayscaleTransformation。如果您使用它们,可以将它们的代码复制到您的项目中。 - 将
Transition.transition更改为非挂起函数,因为不再需要挂起过渡直到其完成。 - 添加
bitmapFactoryMaxParallelism支持,限制正在进行的BitmapFactory操作的最大数量。此值默认为 4,可提高 UI 性能。 - 添加对
interceptorDispatcher、fetcherDispatcher、decoderDispatcher和transformationDispatcher的支持。 - 添加
GenericViewTarget,处理通用的ViewTarget逻辑。 - 将
ByteBuffer添加到默认支持的数据类型中。 Disposable已重构并暴露底层ImageRequest的作业。- 重新设计
MemoryCacheAPI。 - 如果
ImageRequest.fallback为 null,现在在Target上设置ImageRequest.error。 Transformation.key被替换为Transformation.cacheKey。- 更新 Kotlin 至 1.6.10。
- 更新 Compose 至 1.1.1。
- 更新 OkHttp 至 4.9.3。
- 更新 Okio 至 3.0.0。
自 2.0.0-rc03 以来的变更:
- 将
Dimension.Original转换为Dimension.Undefined。- 略微更改了非像素维度的语义,以修复尺寸系统中一些边缘情况(示例)。
- 如果 ContentScale 为 None,则使用
Size.ORIGINAL加载图像。 - 修复首先应用
ImageView.load构建器参数而不是最后应用的问题。 - 修复如果响应未修改则不合并 HTTP 标头的问题。
[2.0.0-rc03] - 2022年4月11日
- 移除
ScaleResolver接口。 - 将
Size构造函数转换为函数。 - 将
Dimension.Pixels的toString更改为仅显示其像素值。 - 防范
SystemCallbacks.onTrimMemory中罕见的崩溃。 - 更新 Coroutines 至 1.6.1。
[2.0.0-rc02] - 2022年3月20日
- 将
ImageRequest的默认尺寸恢复为当前显示的尺寸,而不是Size.ORIGINAL。 - 修复
DiskCache.Builder被标记为实验性的问题。只有DiskCache的方法是实验性的。 - 修复在将图像加载到具有一个维度为
WRAP_CONTENT的ImageView时,会以原始尺寸加载图像而不是将其适配到有界维度中的情况。 - 从
MemoryCache.Key、MemoryCache.Value和Parameters.Entry中移除组件函数。
[2.0.0-rc01] - 2022年3月2日
自 1.4.0 以来的重大变更:
- 最低支持的 API 现在为 21。
- 重新设计 Jetpack Compose 集成。
rememberImagePainter已重命名为rememberAsyncImagePainter。- 添加对
AsyncImage和SubcomposeAsyncImage的支持。有关更多信息,请查看文档。 - 弃用
LocalImageLoader。有关更多信息,请查看弃用消息。
- Coil 2.0 拥有自己的磁盘缓存实现,不再依赖 OkHttp 进行磁盘缓存。
- 使用
ImageLoader.Builder.diskCache和DiskCache.Builder配置磁盘缓存。 - 您不应该在 Coil 2.0 中使用 OkHttp 的
Cache,因为如果在向其写入时线程被中断,缓存可能会损坏。 - 仍支持
Cache-Control和其他缓存标头——除了Vary标头,因为缓存仅检查 URL 是否匹配。此外,仅缓存响应代码在 [200..300) 范围内的响应。 - 升级到 2.0 时将清除现有的磁盘缓存。
- 使用
ImageRequest的默认Scale现在为Scale.FIT。- 更改此设置是为了使
ImageRequest.scale与具有默认Scale的其他类保持一致。 - 带有
ImageViewTarget的请求仍会自动检测其Scale。
- 更改此设置是为了使
ImageRequest的默认尺寸现在为Size.ORIGINAL。- 重新设计图像流水线类:
Mapper、Fetcher和Decoder已重构为更加灵活。Fetcher.key已替换为新的Keyer接口。Keyer根据输入数据创建缓存键。- 添加
ImageSource,允许Decoder使用 Okio 的文件系统 API 直接读取File。
- 禁用生成运行时非空断言。
- 如果您使用 Java,将 null 作为带有非空注解的参数传递给函数将不再立即抛出
NullPointerException。Kotlin 的编译时空安全可防止这种情况发生。 - 此更改允许库的大小更小。
- 如果您使用 Java,将 null 作为带有非空注解的参数传递给函数将不再立即抛出
Size现在由其宽度和高度的两个Dimension值组成。Dimension可以是正像素值或Dimension.Original。- 从库中移除了
BitmapPool和PoolableViewTarget。 - 从库中移除了
VideoFrameFileFetcher和VideoFrameUriFetcher。请改用支持所有数据源的VideoFrameDecoder。 - 从库中移除了
BlurTransformation和GrayscaleTransformation。如果您使用它们,可以将它们的代码复制到您的项目中。 - 将
Transition.transition更改为非挂起函数,因为不再需要挂起过渡直到其完成。 - 添加
bitmapFactoryMaxParallelism支持,限制正在进行的BitmapFactory操作的最大数量。此值默认为 4,可提高 UI 性能。 - 添加对
interceptorDispatcher、fetcherDispatcher、decoderDispatcher和transformationDispatcher的支持。 - 添加
GenericViewTarget,处理通用的ViewTarget逻辑。 - 将
ByteBuffer添加到默认支持的数据类型中。 Disposable已重构并暴露底层ImageRequest的作业。- 重新设计
MemoryCacheAPI。 - 如果
ImageRequest.fallback为 null,现在在Target上设置ImageRequest.error。 Transformation.key被替换为Transformation.cacheKey。- 更新 Kotlin 至 1.6.10。
- 更新 Compose 至 1.1.1。
- 更新 OkHttp 至 4.9.3。
- 更新 Okio 至 3.0.0。
自 2.0.0-alpha09 以来的变更:
- 移除
-Xjvm-default=all编译器标志。 - 修复如果并发执行多个带有 must-revalidate/e-tag 的请求导致加载图像失败的问题。
- 修复如果
<svg标签后有换行符导致DecodeUtils.isSvg返回 false 的问题。 - 使
LocalImageLoader.provides弃用消息更清晰。 - 更新 Compose 至 1.1.1。
- 更新
accompanist-drawablepainter至 0.23.1。
[2.0.0-alpha09] - 2022年2月16日
- 修复
AsyncImage创建无效约束的问题。(#1134) - 向
AsyncImagePainter添加ContentScale参数。(#1144)- 此设置应与
Image上设置的值相同,以确保图像以正确的尺寸加载。
- 此设置应与
- 添加
ScaleResolver以支持为ImageRequest延迟解析Scale。(#1134)ImageRequest.scale应由ImageRequest.scaleResolver.scale()替换。
- 更新 Compose 至 1.1.0。
- 更新
accompanist-drawablepainter至 0.23.0。 - 更新
androidx.lifecycle至 2.4.1。
[2.0.0-alpha08] - 2022年2月7日
- 更新
DiskCache和ImageSource以使用 Okio 的FileSystemAPI。(#1115)
[2.0.0-alpha07] - 2022年1月30日
- 显著提升
AsyncImage性能,并将AsyncImage拆分为AsyncImage和SubcomposeAsyncImage。(#1048)SubcomposeAsyncImage提供loading/success/error/content插槽(slot)API,并使用性能较差的子组合(subcomposition)。AsyncImage提供placeholder/error/fallback参数,用于覆盖加载时或请求失败时绘制的Painter。AsyncImage不使用子组合,性能比SubcomposeAsyncImage好得多。- 从
SubcomposeAsyncImage.content中移除AsyncImagePainter.State参数。如果需要,请使用painter.state。 - 为
AsyncImage和SubcomposeAsyncImage添加onLoading/onSuccess/onError回调。
- 弃用
LocalImageLoader。(#1101) - 添加对
ImageRequest.tags的支持。(#1066) - 将
DecodeUtils中的isGif、isWebP、isAnimatedWebP、isHeif和isAnimatedHeif移至 coil-gif。将isSvg添加到 coil-svg。(#1117) - 将
FetchResult和DecodeResult转换为非 data 类。(#1114) - 移除未使用的
DiskCache.Builder上下文参数。(#1099) - 修复具有原始尺寸的位图资源的缩放问题。(#1072)
- 修复
ImageDecoderDecoder中未能关闭ImageDecoder的问题。(#1109) - 修复在将可绘制对象转换为位图时错误的缩放。(#1084)
- 更新 Compose 至 1.1.0-rc03。
- 更新
accompanist-drawablepainter至 0.22.1-rc。 - 更新
androidx.appcompat:appcompat-resources至 1.4.1。
[2.0.0-alpha06] - 2021年12月24日
- 添加
ImageSource.Metadata以支持从资产、资源和内容 URI 进行解码,无需缓冲或临时文件。(#1060) - 延迟执行图像请求,直到
AsyncImage具有正向约束。(#1028) - 修复如果
loading、success和error都已设置,则为AsyncImage使用DefaultContent的问题。(#1026) - 使用 androidx
LruCache代替平台LruCache。(#1047) - 更新 Kotlin 至 1.6.10。
- 更新 Coroutines 至 1.6.0。
- 更新 Compose 至 1.1.0-rc01。
- 更新
accompanist-drawablepainter至 0.22.0-rc。 - 更新
androidx.collection至 1.2.0。
[2.0.0-alpha05] - 2021年11月28日
- 重要:重构
Size以支持在任一维度上使用图像的原始尺寸。Size现在由其宽度和高度的两个Dimension值组成。Dimension可以是正像素值或Dimension.Original。- 做出此更改是为了在其中一个维度是固定像素值时,更好地支持无界宽度/高度值(例如
wrap_content、Constraints.Infinity)。
- 修复:为
AsyncImage支持检查模式(预览)。 - 修复:如果
imageLoader.memoryCache为 null,SuccessResult.memoryCacheKey应始终为null。 - 将
ImageLoader、SizeResolver和ViewSizeResolver类似构造函数的invoke函数转换为顶级函数。 - 使
CrossfadeDrawable的起始和结束可绘制对象成为公开 API。 - 变异
ImageLoader的占位符/错误/回退可绘制对象。 - 向
SuccessResult的构造函数添加默认参数。 - 依赖
androidx.collection而不是androidx.collection-ktx。 - 更新 OkHttp 至 4.9.3。
[2.0.0-alpha04] - 2021年11月22日
- 新增:向
coil-compose添加AsyncImage。AsyncImage是一个异步执行ImageRequest并渲染结果的可组合项。AsyncImage旨在在大多数用例中取代rememberImagePainter。- 其 API 尚未最终确定,可能会在最终 2.0 版本发布前发生变化。
- 它具有与
Image类似的 API 并支持相同的参数:Alignment、ContentScale、alpha、ColorFilter和FilterQuality。 - 它支持使用
content、loading、success和error参数覆盖为每个AsyncImagePainter状态绘制的内容。 - 它修复了
rememberImagePainter在解析图像尺寸和缩放方面的一些设计问题。 - 使用示例:
kotlin
// 仅绘制图像。
AsyncImage(
model = "https://example.com/image.jpg",
contentDescription = null, // 避免使用 `null`,如果可能请将其设置为本地化字符串。
)
// 绘制具有圆形裁剪、淡入淡出的图像,并覆盖 `loading` 状态。
AsyncImage(
model = ImageRequest.Builder(LocalContext.current)
.data("https://example.com/image.jpg")
.crossfade(true)
.build(),
contentDescription = null,
modifier = Modifier
.clip(CircleShape),
loading = {
CircularProgressIndicator()
},
contentScale = ContentScale.Crop
)
// 绘制具有圆形裁剪、淡入淡出的图像,并覆盖所有状态。
AsyncImage(
model = ImageRequest.Builder(LocalContext.current)
.data("https://example.com/image.jpg")
.crossfade(true)
.build(),
contentDescription = null,
modifier = Modifier
.clip(CircleShape),
contentScale = ContentScale.Crop
) { state ->
if (state is AsyncImagePainter.State.Loading) {
CircularProgressIndicator()
} else {
AsyncImageContent() // 绘制图像。
}
}- 重要:将
ImagePainter重命名为AsyncImagePainter,将rememberImagePainter重命名为rememberAsyncImagePainter。- 不再支持
ExecuteCallback。要让AsyncImagePainter跳过等待onDraw被调用,请改为设置ImageRequest.size(OriginalSize)(或任何尺寸)。 - 向
rememberAsyncImagePainter添加可选的FilterQuality参数。
- 不再支持
- 在
DiskCache中使用协程进行清理操作,并添加DiskCache.Builder.cleanupDispatcher。 - 修复使用
ImageLoader.Builder.placeholder设置占位符时的 Compose 预览。 - 使用
@ReadOnlyComposable标记LocalImageLoader.current以生成更高效的代码。 - 更新 Compose 至 1.1.0-beta03 并依赖
compose.foundation而不是compose.ui。 - 更新
androidx.appcompat-resources至 1.4.0。
[2.0.0-alpha03] - 2021年11月12日
- 添加在 Android 29+ 上加载音乐缩略图的能力。(#967)
- 修复:使用
context.resources加载当前包的资源。(#968) - 修复:
clear->dispose替换表达式。(#970) - 更新 Compose 至 1.0.5。
- 更新
accompanist-drawablepainter至 0.20.2。 - 更新 Okio 至 3.0.0。
- 更新
androidx.annotation至 1.3.0。 - 更新
androidx.core至 1.7.0。 - 更新
androidx.lifecycle至 2.4.0。- 移除对
lifecycle-common-java8的依赖,因为它已合并到lifecycle-common中。
- 移除对
[2.0.0-alpha02] - 2021年10月24日
- 添加一个新的
coil-bom构件,其中包含 物料清单 (BOM)。- 导入
coil-bom允许您依赖其他 Coil 构件而无需指定版本。
- 导入
- 修复使用
ExecuteCallback.Immediate时加载图像失败的问题。 - 更新 Okio 至 3.0.0-alpha.11。
- 这也解决了与 Okio 3.0.0-alpha.11 的兼容性问题。
- 更新 Kotlin 至 1.5.31。
- 更新 Compose 至 1.0.4。
[2.0.0-alpha01] - 2021年10月11日
Coil 2.0.0 是该库的下一个主要迭代,具有新功能、性能改进、API 改进和各种错误修复。在 2.0.0 稳定版发布之前,此版本可能与未来的 alpha 版本存在二进制/源码不兼容。
- 重要:最低支持的 API 现在为 21。
- 重要:启用
-Xjvm-default=all。 - 重要:Coil 现在拥有自己的磁盘缓存实现,不再依赖 OkHttp 进行磁盘缓存。
- 做出此更改是为了:
- 更好地支持解码图像时的线程中断。这提高了图像请求快速连续启动和停止时的性能。
- 支持暴露由
File支持的ImageSource。这避免了在 Android API 需要File进行解码(例如MediaMetadataRetriever)时不必要的复制。 - 支持直接读取/写入磁盘缓存文件。
- 使用
ImageLoader.Builder.diskCache和DiskCache.Builder配置磁盘缓存。 - 您不应该在 Coil 2.0 中使用 OkHttp 的
Cache,因为它在写入过程中被中断可能会损坏。 - 仍支持
Cache-Control和其他缓存标头——除了Vary标头,因为缓存仅检查 URL 是否匹配。此外,仅缓存响应代码在 [200..300) 范围内的响应。 - 使用
ImageLoader.Builder.respectCacheHeaders可以启用或禁用对缓存标头的支持。 - 升级到 2.0 时,现有的磁盘缓存将被清除并重建。
- 做出此更改是为了:
- 重要:
ImageRequest的默认Scale现在为Scale.FIT- 更改此设置是为了使
ImageRequest.scale与具有默认Scale的其他类保持一致。 - 带有
ImageViewTarget的请求仍会自动检测其缩放比例。
- 更改此设置是为了使
- 图像流水线类发生重大变更:
Mapper、Fetcher和Decoder已重构为更加灵活。Fetcher.key已替换为新的Keyer接口。Keyer根据输入数据创建缓存键。- 添加
ImageSource,允许Decoder直接解码File。
- 从库中移除了
BitmapPool和PoolableViewTarget。位图池化被移除的原因: MemoryCache已重构为更加灵活。- 禁用生成运行时非空断言。
- 如果您使用 Java,将 null 作为带有非空注解的参数传递给函数将不再立即抛出
NullPointerException。如果您使用 Kotlin,基本上没有变化。 - 此更改允许库的大小更小。
- 如果您使用 Java,将 null 作为带有非空注解的参数传递给函数将不再立即抛出
- 从库中移除了
VideoFrameFileFetcher和VideoFrameUriFetcher。请改用支持所有数据源的VideoFrameDecoder。 - 添加
bitmapFactoryMaxParallelism支持,限制正在进行的BitmapFactory操作的最大数量。此值默认为 4,可提高 UI 性能。 - 添加对
interceptorDispatcher、fetcherDispatcher、decoderDispatcher和transformationDispatcher的支持。 Disposable已重构并暴露底层ImageRequest的作业。- 将
Transition.transition更改为 non-挂起 函数,因为不再需要挂起过渡直到其完成。 - 添加
GenericViewTarget,处理通用的ViewTarget逻辑。 - 从库中移除了
BlurTransformation和GrayscaleTransformation。- 如果您使用它们,可以将它们的代码复制到您的项目中。
- 如果
ImageRequest.fallback为 null,现在在Target上设置ImageRequest.error。 Transformation.key被替换为Transformation.cacheKey。ImageRequest.Listener分别在onSuccess和onError中返回SuccessResult/ErrorResult。- 将
ByteBuffer添加到默认支持的数据类型中。 - 从多个类中移除了
toString实现。 - 更新 OkHttp 至 4.9.2。
- 更新 Okio 至 3.0.0-alpha.10。
[1.4.0] - 2021年10月6日
- 新增:向
ImagePainter.State.Success和ImagePainter.State.Error添加ImageResult。(#887)- 这是一个二进制不兼容的变更,更改了
ImagePainter.State.Success和ImagePainter.State.Error的签名,但这些 API 已标记为实验性的。
- 这是一个二进制不兼容的变更,更改了
- 仅当
View.isShown为true时才执行CrossfadeTransition。此前它仅检查View.isVisible。(#898) - 修复由于舍入问题导致缩放倍数略小于 1 时可能发生的内存缓存未命中。(#899)
- 使非内联
ComponentRegistry方法公开。(#925) - 依赖
accompanist-drawablepainter并移除 Coil 自定义的DrawablePainter实现。(#845) - 移除对 Java 8 方法的使用以防止脱糖问题。(#924)
- 将
ImagePainter.ExecuteCallback提升为稳定 API。(#927) - 将 compileSdk 更新至 31。
- 更新 Kotlin 至 1.5.30。
- 更新 Coroutines 至 1.5.2。
- 更新 Compose 至 1.0.3。
[1.3.2] - 2021年8月4日
coil-compose现在依赖compose.ui而不是compose.foundation。compose.ui是一个更小的依赖项,因为它是compose.foundation的子集。
- 更新 Jetpack Compose 至 1.0.1。
- 更新 Kotlin 至 1.5.21。
- 更新 Coroutines 至 1.5.1。
- 更新
androidx.exifinterface:exifinterface至 1.3.3。
[1.3.1] - 2021年7月28日
- 更新 Jetpack Compose 至
1.0.0。热烈祝贺 Compose 团队发布稳定版本! - 更新
androidx.appcompat:appcompat-resources至 1.3.1。
[1.3.0] - 2021年7月10日
- 新增:添加对 Jetpack Compose 的支持。它基于 Accompanist 的 Coil 集成,但进行了大量更改。有关更多信息,请查看文档。
- 添加
allowConversionToBitmap以启用/禁用Transformation的自动位图转换。(#775) - 向
ImageDecoderDecoder和GifDecoder添加enforceMinimumFrameDelay,以支持在 GIF 帧延迟低于阈值时进行改写。(#783)- 默认情况下禁用,但将在未来版本中默认启用。
- 添加对启用/禁用
ImageLoader内部网络观察器的支持。(#741) - 修复由
BitmapFactoryDecoder解码的位图密度。(#776) - 修复 Licensee 找不到 Coil 许可证 URL 的问题。(#774)
- 更新
androidx.core:core-ktx至 1.6.0。
[1.2.2] - 2021年6月4日
- 修复在将具有共享状态的可绘制对象转换为位图时的竞态条件。(#771)
- 修复
ImageLoader.Builder.fallback设置error可绘制对象而不是fallback可绘制对象的问题。 - 修复
ResourceUriFetcher返回的数据源不正确的问题。(#770) - 修复 API 26 和 27 上没有可用文件描述符的日志检查。
- 修复平台矢量可绘制对象支持的错误版本检查。(#751)
- 更新 Kotlin (1.5.10)。
- 更新 Coroutines (1.5.0)。
- 更新
androidx.appcompat:appcompat-resources至 1.3.0。 - 更新
androidx.core:core-ktx至 1.5.0。
[1.2.1] - 2021年4月27日
- 修复
VideoFrameUriFetcher尝试处理 http/https URI 的问题。(#734
[1.2.0] - 2021年4月12日
- 重要:在
SvgDecoder中使用 SVG 的视图边界(view bounds)来计算其纵横比。(#688)- 此前,
SvgDecoder使用 SVG 的width/height元素来确定其纵横比,但这并未正确遵循 SVG 规范。 - 要恢复到旧行为,请在构造
SvgDecoder时设置useViewBoundsAsIntrinsicSize = false。
- 此前,
- 新增:添加
VideoFrameDecoder以支持从任何源解码视频帧。(#689) - 新增:支持使用源内容(而不仅仅是 MIME 类型)进行自动 SVG 检测。(#654)
- 新增:支持使用
ImageLoader.newBuilder()共享资源。(#653)- 重要的是,这支持在
ImageLoader实例之间共享内存缓存。
- 重要的是,这支持在
- 新增:支持使用
AnimatedTransformation进行动画图像变换。(#659) - 新增:添加对动画可绘制对象开始/结束回调的支持。(#676)
- 修复 HEIF/HEIC 文件的 EXIF 数据解析。(#664)
- 修复在禁用了位图池化的情况下不使用
EmptyBitmapPool实现的问题。(#638)- 如果没有此修复,位图池化仍会被正确禁用,但它使用的是更重量级的
BitmapPool实现。
- 如果没有此修复,位图池化仍会被正确禁用,但它使用的是更重量级的
- 修复
MovieDrawable.getOpacity会错误地返回透明的情况。(#682) - 防范默认临时目录不存在的情况。(#683)
- 使用 JVM IR 后端进行构建。(#670)
- 更新 Kotlin (1.4.32)。
- 更新 Coroutines (1.4.3)。
- 更新 OkHttp (3.12.13)。
- 更新
androidx.lifecycle:lifecycle-common-java8至 2.3.1。
[1.1.1] - 2021年1月11日
- 修复
ViewSizeResolver.size可能会因为多次恢复协程而抛出IllegalStateException的情况。 - 修复如果从主线程调用
HttpFetcher会永远阻塞的问题。- 使用
ImageRequest.dispatcher(Dispatchers.Main.immediate)强制在主线程执行的请求将失败并抛出NetworkOnMainThreadException,除非将ImageRequest.networkCachePolicy设置为CachePolicy.DISABLED或CachePolicy.WRITE_ONLY。
- 使用
- 如果视频具有旋转元数据,旋转来自
VideoFrameFetcher的视频帧。 - 更新 Kotlin (1.4.21)。
- 更新 Coroutines (1.4.2)。
- 更新 Okio (2.10.0)。
- 更新
androidx.exifinterface:exifinterface(1.3.2)。
[1.1.0] - 2020年11月24日
- 重要:将
CENTER和MATRIXImageView缩放类型更改为解析为OriginalSize。(#587)- 此更改仅影响未显式指定请求尺寸时的隐式尺寸解析算法。
- 做出此更改是为了确保图像请求的视觉结果与
ImageView.setImageResource/ImageView.setImageURI一致。要恢复旧行为,请在构建请求时设置ViewSizeResolver。
- 重要:如果视图的布局参数为
WRAP_CONTENT,则从ViewSizeResolver返回显示尺寸。(#562)- 此前,只有在视图完全布局完成后我们才会返回显示尺寸。此更改使典型行为更加一致和直观。
- 添加控制 alpha 预乘的能力。(#569)
- 在
CrossfadeDrawable中支持优先使用精确的固有大小。(#585) - 检查包含版本的完整 GIF 标头。(#564)
- 添加空位图池实现。(#561)
- 使
EventListener.Factory成为一个函数式接口。(#575) - 稳定
EventListener。(#574) - 为
ImageRequest.Builder.placeholderMemoryCacheKey添加String重载。 - 向
ViewSizeResolver构造函数添加@JvmOverloads。 - 修复:在
CrossfadeDrawable中变异起始/结束可绘制对象。(#572) - 修复:修复 GIF 在第二次加载时不播放的问题。(#577)
- 更新 Kotlin (1.4.20) 并迁移到
kotlin-parcelize插件。 - 更新 Coroutines (1.4.1)。
[1.0.0] - 2020年10月22日
自 0.13.0 以来的变更:
- 添加
Context.imageLoader扩展函数。(#534) - 添加
ImageLoader.executeBlocking扩展函数。(#537) - 如果单例图像加载器被替换,不要将其关闭。(#533)
自 1.0.0-rc3 以来的变更:
- 修复:防范缺少/无效的 ActivityManager。(#541)
- 修复:允许 OkHttp 缓存失败的响应。(#551)
- 更新 Kotlin 至 1.4.10。
- 更新 Okio 至 2.9.0。
- 更新
androidx.exifinterface:exifinterface至 1.3.1。
[1.0.0-rc3] - 2020年9月21日
- 由于不稳定,撤销使用
-Xjvm-default=all编译器标志。- 这是与之前发布候选版本源码兼容但二进制不兼容的更改。
- 添加
Context.imageLoader扩展函数。(#534) - 添加
ImageLoader.executeBlocking扩展函数。(#537) - 如果单例图像加载器被替换,不要将其关闭。(#533)
- 更新 AndroidX 依赖项:
androidx.exifinterface:exifinterface-> 1.3.0
[1.0.0-rc2] - 2020年9月3日
- 此版本需要 Kotlin 1.4.0 或更高版本。
- 0.13.0 中的所有更改。
- 依赖基础 Kotlin
stdlib而不是stdlib-jdk8。
[0.13.0] - 2020年9月3日
- 重要:默认在主线程启动拦截器链。(#513)
- 这在很大程度上恢复了
0.11.0及更低版本的行为,即在主线程上同步检查内存缓存。 - 要恢复到与
0.12.0相同的行为(即在ImageRequest.dispatcher上检查内存缓存),请设置ImageLoader.Builder.launchInterceptorChainOnMainThread(false)。 - 有关更多信息,请参阅
launchInterceptorChainOnMainThread。
- 这在很大程度上恢复了
- 修复:修复如果请求是在处于分离状态的 fragment 中的
ViewTarget上启动,可能导致的内存泄漏。(#518) - 修复:使用
ImageRequest.context加载资源 URI。#517 - 修复:修复可能会导致后续请求无法保存到磁盘缓存的竞态条件。(#510)
- 修复:在 API 18 上使用
blockCountLong和blockSizeLong。
- 使
ImageLoaderFactory成为一个函数式接口。 - 添加
ImageLoader.Builder.addLastModifiedToFileCacheKey,允许您启用/禁用为从File加载的图像在内存缓存键中添加最后修改时间戳。
- 更新 Kotlin 至 1.4.0。
- 更新 Coroutines 至 1.3.9。
- 更新 Okio 至 2.8.0。
[1.0.0-rc1] - 2020年8月18日
- 此版本需要 Kotlin 1.4.0 或更高版本。
- 更新 Kotlin 至 1.4.0 并启用
-Xjvm-default=all。- 请参阅此处了解如何在构建文件中启用
-Xjvm-default=all。 - 这将为默认 Kotlin 接口方法生成 Java 8 默认方法。
- 请参阅此处了解如何在构建文件中启用
- 移除 0.12.0 中所有现有的弃用方法。
- 更新 Coroutines 至 1.3.9。
[0.12.0] - 2020年8月18日
- 破坏性变更:
LoadRequest和GetRequest已由ImageRequest替换:ImageLoader.execute(LoadRequest)->ImageLoader.enqueue(ImageRequest)ImageLoader.execute(GetRequest)->ImageLoader.execute(ImageRequest)ImageRequest实现了equals/hashCode。
- 破坏性变更:重命名了一些类和/或更改了包名:
coil.request.RequestResult->coil.request.ImageResultcoil.request.RequestDisposable->coil.request.Disposablecoil.bitmappool.BitmapPool->coil.bitmap.BitmapPoolcoil.DefaultRequestOptions->coil.request.DefaultRequestOptions
- 破坏性变更:
SparseIntArraySet已从公开 API 中移除。 - 破坏性变更:
TransitionTarget不再实现ViewTarget。 - 破坏性变更:
ImageRequest.Listener.onSuccess的签名已更改,返回ImageResult.Metadata而不仅仅是DataSource。 - 破坏性变更:移除对
LoadRequest.aliasKeys的支持。此 API 最好通过直接读写内存缓存来处理。
- 重要:内存缓存中的值不再同步解析(如果从主线程调用)。
- 做出此更改也是为了支持在后台调度器上执行
Interceptor。 - 此更改还使更多工作脱离主线程,提升了性能。
- 做出此更改也是为了支持在后台调度器上执行
- 重要:
Mappers现在在后台调度器上执行。作为副作用,不再自动支持自动位图采样。要达到相同的效果,请将上一个请求的MemoryCache.Key用作后续请求的placeholderMemoryCacheKey。点此查看示例。placeholderMemoryCacheKeyAPI 提供了更多自由,因为您可以“链接”两个具有不同数据的图像请求(例如小图/大图使用不同的 URL)。
- 重要:Coil 的
ImageView扩展函数已从coil.api包移动到coil包。- 使用查找并替换功能重构
import coil.api.load->import coil.load。不幸的是,无法使用 Kotlin 的ReplaceWith功能来替换导入。
- 使用查找并替换功能重构
- 重要:如果可绘制对象不是同一图像,请使用标准淡入淡出。
- 重要:在 API 24+ 上优先使用不可变位图。
- 重要:
MeasuredMapper已弃用,取而代之的是新的Interceptor接口。有关如何将MeasuredMapper转换为Interceptor的示例,请参阅此处。Interceptor是一个限制更少的 API,允许更广泛的自定义逻辑。
- 重要:
ImageRequest.data现在不能为空。如果您在未设置数据的情况下创建ImageRequest,它将返回NullRequestData作为其数据。
- 新增:支持直接读写访问
ImageLoader的MemoryCache。有关更多信息,请参阅文档。 - 新增:支持
Interceptor。有关更多信息,请参阅文档。Coil 的Interceptor设计深受 OkHttp 的启发! - 新增:能够使用
ImageLoader.Builder.bitmapPoolingEnabled启用/禁用位图池化。- 位图池化在 API 23 及以下版本中最为有效,但在 API 24 及以上版本中仍可能是有益的(通过积极调用
Bitmap.recycle)。
- 位图池化在 API 23 及以下版本中最为有效,但在 API 24 及以上版本中仍可能是有益的(通过积极调用
- 新增:支持解码时的线程中断。
- 修复 content-type 标头中解析多个段的问题。
- 重构位图引用计数,使其更加健壮。
- 修复 API < 19 设备上的 WebP 解码。
- 在 EventListener API 中公开 FetchResult 和 DecodeResult。
- 使用 SDK 30 进行编译。
- 更新 Coroutines 至 1.3.8。
- 更新 OkHttp 至 3.12.12。
- 更新 Okio 至 2.7.0。
- 更新 AndroidX 依赖项:
androidx.appcompat:appcompat-resources-> 1.2.0androidx.core:core-ktx-> 1.3.1
[0.11.0] - 2020年5月14日
- 破坏性变更:此版本移除了所有现有的已弃用函数。
- 这支持了移除 Coil 的
ContentProvider,这样它就不会在应用启动时运行任何代码。
- 这支持了移除 Coil 的
- 破坏性变更:将
SparseIntArraySet.size转换为 val。(#380) - 破坏性变更:将
Parameters.count()移至扩展函数。(#403) - 破坏性变更:使
BitmapPool.maxSize成为 Int。(#404)
- 重要:使
ImageLoader.shutdown()可选(类似于OkHttpClient)。(#385)
- 将默认内存缓存大小降低至 20%。(#390)
- 要恢复现有行为,请在创建
ImageLoader时设置ImageLoaderBuilder.availableMemoryPercentage(0.25)。
- 要恢复现有行为,请在创建
- 更新 Coroutines 至 1.3.6。
- 更新 OkHttp 至 3.12.11。
[0.10.1] - 2020年4月26日
- 修复 API 23 及以下版本在解码大型 PNG 时发生 OOM 的问题。(#372)。
- 这禁用了对 PNG 文件的 EXIF 方向解码。PNG EXIF 方向极少使用,且读取 PNG EXIF 数据(即使它是空的)也需要将整个文件缓冲到内存中,这对性能不利。
- 对
SparseIntArraySet进行了细微的 Java 兼容性改进。
- 更新 Okio 至 2.6.0。
[0.10.0] - 2020年4月20日
亮点
此版本弃用了大部分 DSL API,转而直接使用构建器。 更改如下所示:
kotlin// 0.9.5 (旧版) val imageLoader = ImageLoader(context) { bitmapPoolPercentage(0.5) crossfade(true) } val disposable = imageLoader.load(context, "https://example.com/image.jpg") { target(imageView) } val drawable = imageLoader.get("https://example.com/image.jpg") { size(512, 512) } // 0.10.0 (新版) val imageLoader = ImageLoader.Builder(context) .bitmapPoolPercentage(0.5) .crossfade(true) .build() val request = LoadRequest.Builder(context) .data("https://example.com/image.jpg") .target(imageView) .build() val disposable = imageLoader.execute(request) val request = GetRequest.Builder(context) .data("https://example.com/image.jpg") .size(512, 512) .build() val drawable = imageLoader.execute(request).drawable- 如果您正在使用
io.coil-kt:coil构件,可以调用Coil.execute(request)来使用单例ImageLoader执行请求。
- 如果您正在使用
ImageLoader现在具有一个弱引用内存缓存,当图像从强引用内存缓存中逐出后,它会跟踪这些图像的弱引用。- 这意味着只要仍有对图像的强引用,图像将始终从
ImageLoader的内存缓存中返回。 - 总体而言,这应该使内存缓存更加可预测并提高其命中率。
- 此行为可以使用
ImageLoaderBuilder.trackWeakReferences启用/禁用。
- 这意味着只要仍有对图像的强引用,图像将始终从
添加了一个新构件
io.coil-kt:coil-video,用于从视频文件中解码特定帧。点此阅读更多内容。添加了用于跟踪指标的新 EventListener API。
添加了 ImageLoaderFactory,您的
Application可以实现它以简化单例初始化。
完整版本说明
- 重要:弃用 DSL 语法,转而使用构建器语法。(#267)
- 重要:弃用
Coil和ImageLoader扩展函数。(#322) - 破坏性变更:从
ImageLoader.execute(GetRequest)返回密封类RequestResult类型。(#349) - 破坏性变更:将
ExperimentalCoil重命名为ExperimentalCoilApi。从@Experimental迁移到@RequiresOptIn。(#306) - 破坏性变更:将
CoilLogger替换为Logger接口。(#316) - 破坏性变更:将 destWidth/destHeight 重命名为 dstWidth/dstHeight。(#275)
- 破坏性变更:重新排列
MovieDrawable的构造函数参数。(#272) - 破坏性变更:
Request.Listener的方法现在接收完整的Request对象而不仅仅是其数据。 - 破坏性变更:
GetRequestBuilder现在其构造函数中需要Context。 - 破坏性变更:
Request上的多个属性现在是可空的。 - 行为变更:默认在缓存键中包含参数值。(#319)
- 行为变更:略微调整了
Request.Listener.onStart()的调用时机,使其在Target.onStart()之后立即被调用。(#348)
- 新增:添加
WeakMemoryCache实现。(#295) - 新增:添加
coil-video以支持解码视频帧。(#122) - 新增:引入
EventListener。(#314) - 新增:引入
ImageLoaderFactory。(#311) - 新增:在 Android 11 上支持动画 HEIF 图像序列。(#297)
- 新增:提升 Java 兼容性。(#262)
- 新增:支持设置默认
CachePolicy。(#307) - 新增:支持设置默认
Bitmap.Config。(#342) - 新增:添加
ImageLoader.invalidate(key)以清除单个内存缓存项 (#55) - 新增:添加调试日志以解释为何未重用缓存图像。(#346)
- 新增:为 get 请求支持
error和fallback可绘制对象。
- 修复:修复当 Transformation 缩小输入位图尺寸时内存缓存未命中的问题。(#357)
- 修复:确保 BlurTransformation 中的半径低于 RenderScript 的最大值。(#291)
- 修复:修复解码高色深图像的问题。(#358)
- 修复:在 Android 11 及以上版本中禁用
ImageDecoderDecoder崩溃规避方案。(#298) - 修复:修复 API 23 之前解析 EXIF 数据失败的问题。(#331)
- 修复:修复与 Android R SDK 的不兼容性。(#337)
- 修复:仅当
ImageView具有匹配的SizeResolver时才启用不精确尺寸。(#344) - 修复:允许缓存图像与请求尺寸最多有一像素偏差。(#360)
- 修复:如果视图不可见,则跳过淡入淡出过渡。(#361)
- 弃用
CoilContentProvider。(#293) - 为多个
ImageLoader方法添加@MainThread注解。 - 如果生命周期当前已启动,避免创建
LifecycleCoroutineDispatcher。(#356) - 为
OriginalSize.toString()使用完整包名。 - 解码软件位图时预分配内存。(#354)
- 更新 Kotlin 至 1.3.72。
- 更新 Coroutines 至 1.3.5。
- 更新 OkHttp 至 3.12.10。
- 更新 Okio 至 2.5.0。
- 更新 AndroidX 依赖项:
androidx.exifinterface:exifinterface-> 1.2.0
[0.9.5] - 2020年2月6日
- 修复:确保在检查视图是否启用硬件加速之前将其附加。这修复了请求硬件位图可能会错过内存缓存的情况。
- 更新 AndroidX 依赖项:
androidx.core:core-ktx-> 1.2.0
[0.9.4] - 2020年2月3日
- 修复:在 ImageDecoderDecoder 中进行下采样时遵循纵横比。感谢 @zhanghai。
- 此前,只要位图的配置大于或等于请求中指定的配置,就会从内存缓存中返回位图。例如,如果您请求一个
ARGB_8888位图,可能会从内存缓存中为您返回一个RGBA_F16位图。现在,缓存配置和请求配置必须相等。 - 使
scale和durationMillis成为公开属性。
[0.9.3] - 2020年2月1日
- 修复:在
ScaleDrawable内部平移子可绘制对象以确保其居中。 - 修复:修复 GIF 和 SVG 无法完全填满边界的问题。
- 将
HttpUrl.get()的调用推迟到后台线程。 - 改进 BitmapFactory null 位图错误消息。
- 将 3 台设备添加到硬件位图黑名单。(#264)
- 更新 AndroidX 依赖项:
androidx.lifecycle:lifecycle-common-java8-> 2.2.0
[0.9.2] - 2020年1月19日
- 修复:修复在 API 19 之前解码 GIF 的问题。感谢 @mario。
- 修复:修复光栅化的矢量可绘制对象未被标记为已采样的问题。
- 修复:如果 Movie 维度 <= 0,则抛出异常。
- 修复:修复内存缓存事件未恢复
CrossfadeTransition的问题。 - 修复:如果被禁止,阻止向所有 target 方法返回硬件位图。
- 修复:修复
MovieDrawable未将其自身定位在边界中心的问题。
- 从
CrossfadeDrawable中移除自动缩放。 - 使
BitmapPool.trimMemory成为公开方法。 - 将
AnimatedImageDrawable包装在ScaleDrawable中以确保其填满边界。 - 向
RequestBuilder.setParameter添加@JvmOverloads。 - 如果未设置视图框(view box),则将 SVG 的视图框设置为其尺寸。
- 将状态和级别更改传递给
CrossfadeDrawable子项。
- 更新 OkHttp 至 3.12.8。
[0.9.1] - 2019年12月30日
- 修复:修复调用
LoadRequestBuilder.crossfade(false)时崩溃的问题。
[0.9.0] - 2019年12月30日
- 破坏性变更:
Transformation.transform现在包含一个Size参数。这是为了支持根据Target的尺寸更改输出Bitmap尺寸的变换。带有变换的请求现在也不受图像采样的限制。 - 破坏性变更:
Transformation现在应用于任何类型的Drawable。此前,如果输入Drawable不是BitmapDrawable,则会跳过Transformation。现在,在应用Transformation之前,Drawable会先渲染到位图上。 - 破坏性变更:向
ImageLoader.load传递null数据现在被视为错误,并将使用NullRequestDataException调用Target.onError和Request.Listener.onError。做出此更改是为了支持在数据为null时设置fallback可绘制对象。此前此类请求会被默默忽略。 - 破坏性变更:
RequestDisposable.isDisposed现在是一个val。
- 新增:支持自定义过渡。点此获取更多信息。过渡 API 被标记为实验性,因为该 API 仍处于孵化阶段。
- 新增:添加
RequestDisposable.await以支持在LoadRequest进行时挂起。 - 新增:支持在请求数据为 null 时设置
fallback可绘制对象。 - 新增:添加
Precision。这使得输出Drawable的尺寸保持精确,同时支持对支持缩放的 target(如ImageViewTarget)进行缩放优化。有关更多信息,请参阅其文档。 - 新增:添加
RequestBuilder.aliasKeys以支持匹配多个缓存键。
- 修复:使
RequestDisposable线程安全。 - 修复:
RoundedCornersTransformation现在会裁剪到 target 尺寸然后进行圆角处理。 - 修复:
CircleCropTransformation现在从中心进行裁剪。 - 修复:将几台设备添加到硬件位图黑名单。
- 修复:在将可绘制对象转换为位图时保留纵横比。
- 修复:修复
Scale.FIT可能发生的内存缓存未命中。 - 修复:确保
Parameters迭代顺序是确定性的。 - 修复:在创建
Parameters和ComponentRegistry时进行防御性复制。 - 修复:确保
RealBitmapPool的maxSize>= 0。 - 修复:如果
CrossfadeDrawable未在播放动画或已完成,则显示起始可绘制对象。 - 修复:调整
CrossfadeDrawable以考虑具有未定义固有尺寸的子项。 - 修复:修复
MovieDrawable缩放不正确的问题。
- 更新 Kotlin 至 1.3.61。
- 更新 Kotlin Coroutines 至 1.3.3。
- 更新 Okio 至 2.4.3。
- 更新 AndroidX 依赖项:
androidx.exifinterface:exifinterface-> 1.1.0
[0.8.0] - 2019年10月22日
- 破坏性变更:
SvgDrawable已被移除。取而代之的是,SVG 现在由SvgDecoder预渲染为BitmapDrawable。这使得 SVG 在主线程上的渲染成本显著降低。此外,SvgDecoder现在在其构造函数中需要一个Context。 - 破坏性变更:
SparseIntArraySet扩展函数已移至coil.extension包。
- 新增:支持设置按请求设置网络标头。点此获取更多信息。
- 新增:添加新的
ParametersAPI 以支持在图像流水线中传递自定义数据。 - 新增:在
RoundedCornersTransformation中支持单独的圆角半径。感谢 @khatv911。 - 新增:添加
ImageView.clear()以支持主动释放资源。 - 新增:支持从其他包加载资源。
- 新增:向
ViewSizeResolver添加subtractPadding属性,以启用/禁用在测量时减去视图的内边距。 - 新增:改进
HttpUrlFetcher的 MIME 类型检测。 - 新增:为
MovieDrawable和CrossfadeDrawable添加Animatable2Compat支持。 - 新增:添加
RequestBuilder<*>.repeatCount以设置 GIF 的循环次数。 - 新增:将位图池创建功能添加到公开 API。
- 新增:为
Request.Listener方法添加@MainThread注解。
- 修复:使
CoilContentProvider对测试可见。 - 修复:在资源缓存键中包含夜间模式。
- 修复:通过暂时将源写入磁盘来规避
ImageDecoder原生崩溃问题。 - 修复:正确处理联系人显示照片 URI。
- 修复:到着色(tint)传递给
CrossfadeDrawable的子项。 - 修复:修复了几处未关闭源的情况。
- 修复:添加了具有损坏/不完整硬件位图实现的设备黑名单。
- 针对 SDK 29 进行编译。
- 更新 Kotlin Coroutines 至 1.3.2。
- 更新 OkHttp 至 3.12.6。
- 更新 Okio 至 2.4.1。
- 为
coil-base将appcompat-resources从compileOnly更改为implementation。
[0.7.0] - 2019年9月8日
- 破坏性变更:
ImageLoaderBuilder.okHttpClient(OkHttpClient.Builder.() -> Unit)现在变为ImageLoaderBuilder.okHttpClient(() -> OkHttpClient)。此外,初始值设定项现在在后台线程上延迟调用。如果您设置了自定义OkHttpClient,您必须设置OkHttpClient.cache以启用磁盘缓存。 如果您未设置自定义OkHttpClient,Coil 将创建启用磁盘缓存的默认OkHttpClient。可以使用CoilUtils.createDefaultCache(context)创建默认的 Coil 缓存。例如:
kotlin
val imageLoader = ImageLoader(context) {
okHttpClient {
OkHttpClient.Builder()
.cache(CoilUtils.createDefaultCache(context))
.build()
}
}- 破坏性变更:
Fetcher.key不再具有默认实现。 - 破坏性变更:此前,只会调用第一个适用的
Mapper。现在,所有适用的Mapper都会被调用。API 无变化。 - 破坏性变更:细微的命名参数重命名:
url->uri,factory->initializer。
- 新增:
coil-svg构件,它具有支持自动解码 SVG 的SvgDecoder。由 AndroidSVG 提供支持。感谢 @rharter。 - 新增:
load(String)和get(String)现在接受任何受支持的 Uri 方案。例如:您现在可以执行imageView.load("file:///path/to/file.jpg")。 - 新增:重构
ImageLoader以使用Call.Factory而不是OkHttpClient。这支持使用ImageLoaderBuilder.okHttpClient { OkHttpClient() }延迟初始化网络资源。感谢 @ZacSweers。 - 新增:使用
RequestBuilder.decoder显式设置请求的解码器。 - 新增:使用
ImageLoaderBuilder.allowHardware默认在ImageLoader中启用/禁用硬件位图。 - 新增:在
ImageDecoderDecoder中支持软件渲染。
- 修复:加载矢量可绘制对象时的多个错误。
- 修复:支持
WRAP_CONTENT视图维度。 - 修复:支持解析长度超过 8192 字节的 EXIF 数据。
- 修复:在淡入淡出时不要拉伸具有不同纵横比的可绘制对象。
- 修复:防范由于异常导致网络观察器无法注册的情况。
- 修复:修复
MovieDrawable中的除以零错误。感谢 @R12rus。 - 修复:支持嵌套的 Android 资产文件。感谢 @JaCzekanski。
- 修复:防范在 Android O 和 O_MR1 上耗尽文件描述符。
- 修复:修复禁用内存缓存时崩溃的问题。感谢 @hansenji。
- 修复:确保
Target.cancel始终从主线程调用。
- 更新 Kotlin 至 1.3.50。
- 更新 Kotlin Coroutines 至 1.3.0。
- 更新 OkHttp 至 3.12.4。
- 更新 Okio 至 2.4.0。
- 更新 AndroidX 依赖项至最新稳定版本:
androidx.appcompat:appcompat-> 1.1.0androidx.core:core-ktx-> 1.1.0androidx.lifecycle:lifecycle-common-java8-> 2.1.0
- 将
appcompat替换为appcompat-resources作为可选的compileOnly依赖项。appcompat-resources是一个更小的构件。
[0.6.1] - 2019年8月16日
- 新增:向
RequestBuilder添加transformations(List<Transformation>)。 - 修复:为文件 URI 在缓存键中添加最后修改日期。
- 修复:确保视图维度评估为至少 1px。
- 修复:在帧之间清除
MovieDrawable的画布。 - 修复:正确打开资产。
[0.6.0] - 2019年8月12日
- 初始版本。
