更新日志
[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的行为保持一致。 - 修复了
ImageLoaders.executeBlocking在 Java 中无法访问的问题。 - 在
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 以来的变更:
- 重要:
coil-compose和coil-compose-core现在需要 Java 11 字节码,因为 Compose1.8.0要求它。有关如何启用它的信息,请参阅此处。 - 将
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 日
- 修复了在使用
KtorNetworkFetcherFactory(Ktor 3) 在非 JVM 目标上加载图像时,图像请求因ClosedByteChannelException而失败的问题。
[3.2.0-rc01] - 2025 年 4 月 24 日
- 重要:
coil-compose和coil-compose-core现在需要 Java 11 字节码,因为 Compose1.8.0要求它。有关如何启用它的信息,请参阅此处。 - 将
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的依赖。- 这也修复了
AsyncImagePainter在 Paparazzi 和 Roborazzi 屏幕截图测试中不同步执行ImageRequest的情况。
- 这也修复了
- 添加对数据 URI 的支持,格式为:
data:[<mediatype>][;base64],<data>。 - 添加
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。
- 注意:如果使用 Kotlin native,此版本需要使用 Kotlin 2.1.0 或更高版本进行编译,因为 LLVM 进行了更新,请参阅此处了解更多信息。
- 更新 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不尊重色调状态的问题。 - 允许
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在删除文件后不会跟踪条目删除的边缘情况。 - 在记录错误时将可抛出对象传递给
Logger。 - 不要用
kotlin-stdlib替换kotlin-stdlib-jdk7和kotlin-stdlib-jdk8。
[3.0.2] - 2024 年 11 月 9 日
- 修复了在 Android 上使用自定义
CacheStrategy调用OkHttpNetworkFetcherFactory时崩溃的问题。 - 修复了
CacheControlCacheStrategy错误计算缓存条目年龄的问题。 - 修复了当
ImageRequest.bitmapConfig仅在 API 28 及更高版本上被遵循的情况,如果它是ARGB_8888或HARDWARE。
[3.0.1] - 2024 年 11 月 7 日
- 修复了使用硬件位图支持的
BitmapImage调用Image.toBitmap时崩溃的问题。 - 修复了
AsyncImageModelEqualityDelegate.Default对非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函数。 - 从
AsyncImage中移除EqualityDelegate参数。相反,它应该通过LocalAsyncImageModelEqualityDelegate进行设置。 - 修复了当父可组合项使用
IntrinsicSize时AsyncImage不渲染的问题。 - 修复了当
AsyncImagePainter没有子绘制器时,AsyncImage填充可用约束的问题。 - 修复了当
rememberAsyncImagePainter的状态由于EqualityDelegate被忽略而导致无限重组的问题。 - 修复了解析包含特殊字符的
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。 - 在获取时从
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。此外,引入io.coil-kt.coil3:coil-network-ktor3,它依赖于 Ktor 3.x。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 的支持,因为它会阻止资源缩小优化。- 如果您仍然需要此功能,可以手动将
ResourceUriMapper包含到您的组件注册表中。
- 如果您仍然需要此功能,可以手动将
- 新特性:引入
AsyncImagePreviewHandler以支持控制AsyncImagePainter的预览渲染行为。- 使用
LocalAsyncImagePreviewHandler覆盖预览行为。 - 作为此更改和
coil-compose其他改进的一部分,AsyncImagePainter现在默认尝试执行ImageRequest,而不是默认显示ImageRequest.placeholder。使用网络或文件的请求在预览环境中预计会失败,但 Android 资源应该可以工作。
- 使用
- 新特性:支持按帧索引提取视频图像。(#2183)
- 新特性:支持将
CoroutineContext传递给任何CoroutineDispatcher方法。(#2241)。 - 新特性:支持 JS 和 WASM JS 上的弱引用内存缓存。
- 不在 Compose 中分派到
Dispatchers.Main.immediate。副作用是,在 JVM 上不再需要导入kotlinx-coroutines-swing。 - 不在 Compose 中调用
async并创建可处置对象以提高性能(感谢 @mlykotom!)。(#2205) - 修复了将全局
ImageLoader额外数据传递给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 平台上绘制不以Bitmap为后备的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。此外,还有一个新的coil-network-okhttp工件,它依赖于 OkHttp,并且不需要指定 Ktor 引擎。- 根据您导入的工件,您可以使用
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 现在是一个 Kotlin Multiplatform 库,支持 Android、JVM、iOS、macOS 和 Javascript。
- 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。 - 不要自动将
ColorDrawable转换为ColorPainter在AsyncImagePainter中。 - 使用
@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的子模块)添加了基线配置文件。- 这提高了 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,则ImageRequest.error现在会设置在Target上。 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的方法是实验性的。 - 修复了将图像加载到
ImageView中,其中一个维度为WRAP_CONTENT时,图像会以原始大小加载,而不是适应有界维度的情况。 - 移除
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,则ImageRequest.error现在会设置在Target上。 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插槽 API,并使用子组合,性能较差。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转换为非数据类。(#1114) - 移除未使用的
DiskCache.Buildercontext 参数。(#1099) - 修复原始大小位图资源的缩放问题。(#1072)
- 修复
ImageDecoderDecoder中ImageDecoder关闭失败的问题。(#1109) - 修复将 drawable 转换为位图时缩放不正确的问题。(#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的起始和结束 drawable 公开为 API。 - 修改
ImageLoader的占位符/错误/回退 drawable。 - 为
SuccessResult的构造函数添加默认参数。 - 依赖
androidx.collection而不是androidx.collection-ktx。 - 更新 OkHttp 到 4.9.3。
[2.0.0-alpha04] - 2021 年 11 月 22 日
- 新特性:将
AsyncImage添加到coil-compose。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工件,其中包括一个材料清单。- 导入
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已从库中移除。位图池已被移除,因为:- 它在 API 23 及以下最有效,但随着更新的 Android 版本效果降低。
- 移除位图池允许 Coil 使用不可变位图,这具有性能优势。
- 管理位图池存在运行时开销。
- 位图池对 Coil 的 API 造成设计限制,因为它需要跟踪位图是否符合池化条件。移除位图池允许 Coil 在更多地方(例如
Listener、Disposable)暴露结果Drawable。此外,这意味着 Coil 不必清除ImageView,这可能会导致问题。 - 位图池容易出错。分配新的位图比尝试重用可能仍在使用的位图安全得多。
MemoryCache已被重构以更灵活。- 禁用生成运行时非空断言。
- 如果您使用 Java,将 null 作为非空注解参数传递给函数将不再立即抛出
NullPointerException。如果您使用 Kotlin,则基本没有变化。 - 此更改允许库的大小更小。
- 如果您使用 Java,将 null 作为非空注解参数传递给函数将不再立即抛出
VideoFrameFileFetcher和VideoFrameUriFetcher已从库中移除。而是使用VideoFrameDecoder,它支持所有数据源。- 添加对
bitmapFactoryMaxParallelism的支持,它限制了正在进行的BitmapFactory操作的最大数量。此值默认为 4,这提高了 UI 性能。 - 添加对
interceptorDispatcher、fetcherDispatcher、decoderDispatcher和transformationDispatcher的支持。 Disposable已被重构并暴露底层ImageRequest的作业。- 将
Transition.transition更改为非挂起函数,因为它不再需要挂起过渡直到完成。 - 添加
GenericViewTarget,它处理通用ViewTarget逻辑。 BlurTransformation和GrayscaleTransformation已从库中移除。- 如果您使用它们,可以将它们的代码复制到您的项目中。
- 如果
ImageRequest.fallback为 null,则ImageRequest.error现在会设置在Target上。 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 日
- 新特性:将
ImageResult添加到ImagePainter.State.Success和ImagePainter.State.Error。(#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) - 添加
enforceMinimumFrameDelay到ImageDecoderDecoder和GifDecoder,以支持如果 GIF 的帧延迟低于某个阈值,则重写它。(#783)- 此功能默认禁用,但将在未来版本中默认启用。
- 添加支持启用/禁用
ImageLoader的内部网络观察器。(#741) - 修复
BitmapFactoryDecoder解码位图的密度。(#776) - 修复 Licensee 找不到 Coil 的许可证 URL。(#774)
- 更新
androidx.core:core-ktx到 1.6.0。
[1.2.2] - 2021 年 6 月 4 日
- 修复了将具有共享状态的 drawable 转换为位图时的竞态条件。(#771)
- 修复了
ImageLoader.Builder.fallback设置errordrawable 而不是fallbackdrawable 的问题。 - 修复了
ResourceUriFetcher返回不正确数据源的问题。(#770) - 修复了 API 26 和 27 上没有可用文件描述符的日志检查。
- 修复了平台矢量 drawable 支持的版本检查不正确的问题。(#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 的视图边界来计算其宽高比。(#688)- 以前,
SvgDecoder使用 SVG 的width/height元素来确定其宽高比,但这不正确遵循 SVG 规范。 - 要恢复旧行为,请在构建
SvgDecoder时设置useViewBoundsAsIntrinsicSize = false。
- 以前,
- 新特性:添加
VideoFrameDecoder以支持从任何源解码视频帧。(#689) - 新特性:支持使用源内容而不是仅 MIME 类型自动检测 SVG。(#654)
- 新特性:支持使用
ImageLoader.newBuilder()共享资源。(#653)- 重要的是,这使得
ImageLoader实例之间可以共享内存缓存。
- 重要的是,这使得
- 新特性:添加对使用
AnimatedTransformation的动画图像转换的支持。(#659) - 新特性:添加对动画 drawable 的开始/结束回调的支持。(#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中的起始/结束 drawable。(#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 日
- 破坏性变更:
Interceptor链默认在主线程上启动。(#513)- 这基本恢复了
0.11.0及以下版本的行为,即内存缓存会在主线程上同步检查。 - 要恢复使用
0.12.0的行为(内存缓存在ImageRequest.dispatcher上检查),请设置ImageLoader.Builder.launchInterceptorChainOnMainThread(false)。 - 有关更多信息,请参阅
launchInterceptorChainOnMainThread。
- 这基本恢复了
- 修复:修复了当请求在分离的片段中的
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也是必要的。 - 此更改还将更多工作从主线程转移,提高了性能。
- 此更改对于支持在后台调度器上执行
- 重要:
Mapper现在在后台调度器上执行。副作用是,自动位图采样不再自动支持。要实现相同效果,请将前一个请求的MemoryCache.Key用作后续请求的placeholderMemoryCacheKey。有关示例,请参阅此处。placeholderMemoryCacheKeyAPI 提供了更多自由,因为您可以将两个具有不同数据(例如,用于小/大图像的不同 URL)的图像请求“链接”起来。
- 重要:Coil 的
ImageView扩展函数已从coil.api包移动到coil包。- 使用查找 + 替换重构
import coil.api.load->import coil.load。不幸的是,无法使用 Kotlin 的ReplaceWith功能替换导入。
- 使用查找 + 替换重构
- 重要:如果 drawable 不是同一图像,则使用标准交叉淡入。
- 重要:在 API 24+ 上优先使用不可变位图。
- 重要:
MeasuredMapper已被弃用,取而代之的是新的Interceptor接口。有关如何将MeasuredMapper转换为Interceptor的示例,请参阅此处。Interceptor是一个限制少得多的 API,允许实现更广泛的自定义逻辑。
- 重要:
ImageRequest.data现在不为 null。如果您创建ImageRequest而不设置其数据,它将返回NullRequestData作为其数据。
- 新特性:添加对
ImageLoader的MemoryCache的直接读写访问。有关更多信息,请参阅文档。 - 新特性:添加对
Interceptor的支持。有关更多信息,请参阅文档。Coil 的Interceptor设计深受 OkHttp 的启发! - 新特性:添加使用
ImageLoader.Builder.bitmapPoolingEnabled启用/禁用位图池的能力。- 位图池在 API 23 及以下最有效,但可能在 API 24 及以上仍有益(通过急切调用
Bitmap.recycle)。
- 位图池在 API 23 及以下最有效,但可能在 API 24 及以上仍有益(通过急切调用
- 新特性:支持解码时的线程中断。
- 修复:解析内容类型头中的多个段。
- 重构位图引用计数以更健壮。
- 修复在 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和fallbackdrawable。
- 修复:修复了当
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) - 使用
@MainThread注解多个ImageLoader方法。 - 如果生命周期当前已启动,则避免创建
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位图。现在,缓存配置和请求配置必须相等。 - 将
CrossfadeDrawable和CrossfadeTransition中的scale和durationMillis公开。
[0.9.3] - 2020 年 2 月 1 日
- 修复:在
ScaleDrawable内部平移子 drawable 以确保其居中。 - 修复:修复 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。
- 修复:修复栅格化矢量 drawable 未标记为已采样的问题。
- 修复:如果 Movie 维度 <= 0 则抛出异常。
- 修复:修复
CrossfadeTransition未因内存缓存事件而恢复的问题。 - 修复:如果不允许,则阻止将硬件位图返回给所有目标方法。
- 修复:修复
MovieDrawable未将其自身定位在其边界中心的问题。
- 从
CrossfadeDrawable中移除自动缩放。 - 将
BitmapPool.trimMemory公开。 - 将
AnimatedImageDrawable包装在ScaleDrawable中以确保其填充边界。 - 为
RequestBuilder.setParameter添加@JvmOverloads。 - 如果未设置,将 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。现在,Drawable在应用Transformation之前会渲染到位图。 - 破坏性变更:将
null数据传递给ImageLoader.load现在被视为错误,并使用NullRequestDataException调用Target.onError和Request.Listener.onError。此更改是为了支持在数据为null时设置fallbackdrawable。以前请求会被静默忽略。 - 破坏性变更:
RequestDisposable.isDisposed现在是val。
- 新特性:支持自定义过渡。有关更多信息,请参阅此处。过渡被标记为实验性,因为 API 正在孵化中。
- 新特性:添加
RequestDisposable.await以支持在LoadRequest进行中时挂起。 - 新特性:支持在请求数据为 null 时设置
fallbackdrawable。 - 新特性:添加
Precision。这使得输出Drawable的大小精确,同时为支持缩放的目标(例如ImageViewTarget)启用缩放优化。有关更多信息,请参阅其文档。 - 新特性:添加
RequestBuilder.aliasKeys以支持匹配多个缓存键。
- 修复:使 RequestDisposable 线程安全。
- 修复:
RoundedCornersTransformation现在裁剪到目标大小,然后圆角。 - 修复:
CircleCropTransformation现在从中心裁剪。 - 修复:将多个设备添加到硬件位图黑名单。
- 修复:将 Drawable 转换为 Bitmap 时保留宽高比。
- 修复:修复
Scale.FIT可能导致内存缓存未命中。 - 修复:确保 Parameters 迭代顺序是确定性的。
- 修复:在创建 Parameters 和 ComponentRegistry 时进行防御性复制。
- 修复:确保 RealBitmapPool 的
maxSize>= 0。 - 修复:如果
CrossfadeDrawable未动画或已完成,则显示起始 drawable。 - 修复:调整
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 的重复计数。 - 新特性:将 BitmapPool 创建添加到公共 API。
- 新特性:使用
@MainThread注解 Request.Listener 方法。
- 修复:使 CoilContentProvider 对测试可见。
- 修复:在资源缓存键中包含夜间模式。
- 修复:通过临时将源写入磁盘来解决 ImageDecoder 本机崩溃问题。
- 修复:正确处理联系人显示照片 URI。
- 修复:将色调传递给
CrossfadeDrawable的子项。 - 修复:修复多个未关闭源的实例。
- 修复:添加带有损坏/不完整硬件位图实现的设备黑名单。
- 针对 SDK 29 编译。
- 更新 Kotlin Coroutines 到 1.3.2。
- 更新 OkHttp 到 3.12.6。
- 更新 Okio 到 2.4.1。
- 将
appcompat-resources从compileOnly更改为implementation,用于coil-base。
[0.7.0] - 2019 年 9 月 8 日
- 破坏性变更:
ImageLoaderBuilder.okHttpClient(OkHttpClient.Builder.() -> Unit)现在是ImageLoaderBuilder.okHttpClient(() -> OkHttpClient)。初始化器现在也在后台线程上延迟调用。如果您设置自定义OkHttpClient,则必须设置OkHttpClient.cache以启用磁盘缓存。如果您不设置自定义OkHttpClient,Coil 将创建默认的OkHttpClient,该默认OkHttpClient已启用磁盘缓存。默认 Coil 缓存可以使用CoilUtils.createDefaultCache(context)创建。例如:
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 中的软件渲染。
- 修复:加载矢量 drawable 的多个错误。
- 修复:支持
WRAP_CONTENT视图维度。 - 修复:支持解析长于 8192 字节的 EXIF 数据。
- 修复:交叉淡入时不要拉伸宽高比不同的 drawable。
- 修复:防止网络观察器因异常而注册失败。
- 修复:修复 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-resources替换appcompat作为可选的compileOnly依赖项。appcompat-resources是一个更小的工件。
[0.6.1] - 2019 年 8 月 16 日
- 新特性:为 RequestBuilder 添加
transformations(List<Transformation>)。 - 修复:将最后修改日期添加到文件 URI 的缓存键。
- 修复:确保视图维度至少评估为 1px。
- 修复:清除 MovieDrawable 帧之间的画布。
- 修复:正确打开资产。
[0.6.0] - 2019 年 8 月 12 日
- 首次发布。
