更新日誌
[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以支援為相同金鑰合併進行中的網路請求。(#2995, #3326)DeDupeConcurrentRequestStrategy啟用了此行為,並讓等待者 (waiters) 等待進行中網路請求的結果。- 此行為目前為實驗性,且預設為停用。
- 目前請求一律根據其
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 回應主體時潛在的資料競爭 (race condition)。(#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。 - 修正
CrossfadePainter.intrinsicSize在動畫結束時當start影像被取消參照時發生變化的問題。這與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。
- 更新協同程式至 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。
- 更新協同程式至 1.10.2。
[3.1.0] - 2025 年 2 月 4 日
- 提升
AsyncImage效能。- 根據可組合項 (composable) 是被具現化還是被重複使用,執行階段效能提升了 25% 至 40%。記憶體分配也減少了 35% 至 48%。更多資訊請見此處。
- 加入
ColorImage並棄用FakeImage。ColorImage對於在測試與預覽中傳回虛假值非常有用。它解決了與FakeImage相同的使用案例,但在coil-core中比在coil-test中更容易取得。
- 移除
coil-compose-core對Dispatchers.Main.immedate的相依性。- 這也修正了
AsyncImagePainter在 Paparazzi 與 Roborazzi 螢幕截圖測試中無法同步執行ImageRequest的問題。
- 這也修正了
- 加入對格式為
data:[<mediatype>][;base64],<data>的 資料 URI 的支援。 - 加入
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 原生 (Kotlin native),由於 LLVM 更新,此版本要求使用 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-jdk7與kotlin-stdlib-jdk8替換為kotlin-stdlib。
[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 是下一個主要版本,完整支援 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填充可用限制的問題。 - 修正
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載入極大影像而導致記憶體耗盡 (OOM) 例外。
- 此屬性預設為 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) - 修正分塊 (chunked) 回應導致的重複網路呼叫。(#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或從記憶體快取解析之前會有一格 (frame) 的延遲。
- 注意:這重新引入了對
[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且不建立 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。
- 更新協同程式至 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,以符合協同程式、Ktor 與 AndroidX 使用的命名慣例。- 關於重要變更的完整清單,請查看升級指南。
[2.5.0] - 2023 年 10 月 30 日
- 新增:在
coil-video中加入MediaDataSourceFetcher.Factory以支援解碼MediaDataSource實作。(#1795) - 將
SHIFT6m裝置加入硬體位元圖黑名單。(#1812) - 修正:防範傳回具有一個無界維度大小的繪製器。(#1826)
- 修正:當快取標頭包含非 ASCII 字元時,
304 Not Modified後的磁碟快取載入失敗。(#1839) - 修正:
FakeImageEngine未更新攔截器鏈的請求。(#1905) - 更新編譯 SDK 至 34。
- 更新 Kotlin 至 1.9.10。
- 更新協同程式至 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。
- 更新協同程式至 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。此類別對於寫死影像載入器回應非常有用,以確保測試中獲得一致且同步(來自主執行緒)的回應。詳情請見此處。 - 新增:將 baseline profiles 加入
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
- 修正解碼資產 (asset) 子資料夾內的影片。#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。
- 更新協同程式至 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的私有方法轉換為受保護 (protected) 方法。(#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配置磁碟快取。 - 您不應將 OkHttp 的
Cache與 Coil 2.0 一起使用。詳情請見此處。 - 仍支援
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。更多資訊請查看棄用訊息。
- 停用產生執行階段非 Null 斷言。
- 若您使用 Java,將 null 作為加上非 Null 註解的引數傳遞給函式時,將不再立即拋出
NullPointerException。Kotlin 的編譯時期 Null 安全性可防止這種情況發生。 - 此變更有助於縮小程式庫的大小。
- 若您使用 Java,將 null 作為加上非 Null 註解的引數傳遞給函式時,將不再立即拋出
Size現在由寬度與高度的兩個Dimension值組成。Dimension可以是正像素值或Dimension.Undefined。詳情請見此處。- 已從程式庫中移除
BitmapPool與PoolableViewTarget。 - 已從程式庫中移除
VideoFrameFileFetcher與VideoFrameUriFetcher。請改用支援所有資料來源的VideoFrameDecoder。 - 已從程式庫中移除
BlurTransformation與GrayscaleTransformation。若您仍需使用它們,可以將其程式碼複製到您的專案中。 - 將
Transition.transition變更為非暫停函式,因為不再需要暫停轉換直至完成。 - 加入
GenericViewTarget,處理通用的ViewTarget邏輯。 - 將
bitmapFactoryMaxParallelism加入支援,用於限制進行中的BitmapFactory作業數量。此值預設為 4,可提升 UI 效能。 - 加入對
interceptorDispatcher、fetcherDispatcher、decoderDispatcher與transformationDispatcher的支援。 - 加入
ByteBuffer至預設支援的資料型別。 Disposable已重構並公開底層ImageRequest的工作 (job)。- 重構
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中罕見的崩潰。 - 更新協同程式至 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配置磁碟快取。 - 您 不應 將 OkHttp 的
Cache與 Coil 2.0 一起使用,因為若在寫入時執行緒被中斷,快取可能會損毀。 - 仍支援
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。
- 停用產生執行階段非 Null 斷言。
- 若您使用 Java,將 null 作為加上非 Null 參數的引數傳遞給函式時,將不再立即拋出
NullPointerException。Kotlin 的編譯時期 Null 安全性可防止這種情況發生。 - 此變更有助於縮小程式庫的大小。
- 若您使用 Java,將 null 作為加上非 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的工作 (job)。- 重構
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插槽 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轉換為非資料類別。(#1114) - 移除未使用的
DiskCache.Buildercontext 引數。(#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以支援從資產 (assets)、資源 (resources) 與內容 URI 解碼,而無需緩衝或暫存檔案。(#1060) - 延遲執行影像請求,直到
AsyncImage具有正向限制。(#1028) - 修正當
loading、success與error都設定時,AsyncImage未使用DefaultContent的問題。(#1026) - 使用 androidx
LruCache取代平台LruCache。(#1047) - 更新 Kotlin 至 1.6.10。
- 更新協同程式至 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支援檢查模式 (inspection mode)(預覽)。 - 修正:若
imageLoader.memoryCache為 null,則SuccessResult.memoryCacheKey應始終為null。 - 將
ImageLoader、SizeResolver與ViewSizeResolver類建構函式的invoke函式轉換為頂層函式。 - 將
CrossfadeDrawable的起始與結束可繪製對象設為公開 API。 - 變更
ImageLoader的 placeholder/error/fallback 可繪製對象。 - 為
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構件,其中包含 物料清單 (bill of materials)。- 匯入
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配置磁碟快取。 - 您 不應 將 OkHttp 的
Cache與 Coil 2.0 一起使用,因為若在寫入時中斷,快取可能會損毀。 - 仍支援
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已重構以提供更大的靈活性。- 停用產生執行階段非 Null 斷言。
- 若您使用 Java,將 null 作為加上非 Null 註解的參數傳遞給函式時,將不再立即拋出
NullPointerException。若您使用 Kotlin,則基本上沒有變化。 - 此變更有助於縮小程式庫的大小。
- 若您使用 Java,將 null 作為加上非 Null 註解的參數傳遞給函式時,將不再立即拋出
- 已從程式庫中移除
VideoFrameFileFetcher與VideoFrameUriFetcher。請改用支援所有資料來源的VideoFrameDecoder。 - 加入對
bitmapFactoryMaxParallelism支援,用於限制進行中的BitmapFactory作業數量。此值預設為 4,可提升 UI 效能。 - 加入對
interceptorDispatcher、fetcherDispatcher、decoderDispatcher與transformationDispatcher的支援。 Disposable已重構並公開底層ImageRequest的工作 (job)。- 將
Transition.transition變更為非暫停函式,因為不再需要暫停轉換直至完成。 - 加入
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 方法的使用以防止發生脫糖 (desugaring) 問題。(#924)
- 將
ImagePainter.ExecuteCallback提升為穩定 API。(#927) - 更新 compileSdk 至 31。
- 更新 Kotlin 至 1.5.30。
- 更新協同程式至 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。
- 更新協同程式至 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)。
- 更新協同程式 (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)。
- 更新協同程式 (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)。
- 更新協同程式 (1.4.2)。
- 更新 Okio (2.10.0)。
- 更新
androidx.exifinterface:exifinterface(1.3.2)。
[1.1.0] - 2020 年 11 月 24 日
- 重要:變更
CENTER與MATRIX的ImageView縮放類型使其解析為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外掛程式。 - 更新協同程式 (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。
- 更新協同程式 至 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 中所有現有的棄用方法。
- 更新協同程式 至 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現在不為 null。若您在未設定資料的情況下建立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 編譯。
- 更新協同程式 至 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)。
- 若要恢復現有行為,請在建立
- 更新協同程式 至 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,改為直接使用建構器 (builders)。 以下是變更示例:
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上的多個屬性現在可為 null。 - 行為變更:預設在快取金鑰中包含參數值。(#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) - 使用
@MainThread註解多個ImageLoader方法。 - 若生命週期目前已啟動,避免建立
LifecycleCoroutineDispatcher。(#356) - 為
OriginalSize.toString()使用完整套件名稱。 - 解碼軟體位元圖時進行預分配。(#354)
- 更新 Kotlin 至 1.3.72。
- 更新協同程式 至 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設為CrossfadeDrawable與CrossfadeTransition中的公開項。
[0.9.3] - 2020 年 2 月 1 日
- 修正:平移
ScaleDrawable內的子可繪製對象以確保其居中。 - 修正:修正 GIF 與 SVG 無法完全填充邊界的情況。
- 將
HttpUrl.get()的呼叫延遲至背景執行緒。 - 改善
BitmapFactory空位元圖錯誤訊息。 - 將 3 個裝置加入硬體位元圖黑名單。(#264)
- 更新 AndroidX 相依性:
androidx.lifecycle:lifecycle-common-java8-> 2.2.0
[0.9.2] - 2020 年 1 月 19 日
- 修正:修正 API 19 之前解碼 GIF 的問題。感謝 @mario。
- 修正:修正點陣化的向量可繪製資源未被標記為已採樣的問題。
- 修正:若 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。現在,在套用Transformation之前,Drawable會先渲染為Bitmap。 - 破壞性變更:向
ImageLoader.load傳遞null資料現在被視為錯誤,並會呼叫Target.onError與Request.Listener.onError並帶有NullRequestDataException。此變更是為了在資料為null時支援設定fallback可繪製對象。先前此類請求會被靜默忽略。 - 破壞性變更:
RequestDisposable.isDisposed現在是一個val。
- 新增:支援自訂過渡。 詳情請見此處。由於 API 尚在醞釀中,過渡功能被標記為實驗性。
- 新增:加入
RequestDisposable.await以支援在LoadRequest進行時暫停。 - 新增:支援在請求資料為 null 時設定
fallback可繪製對象。 - 新增:加入
Precision。這使得輸出Drawable的大小精確,同時為支援縮放的目標(例如ImageViewTarget)啟用縮放最佳化。詳情請見其文件。 - 新增:加入
RequestBuilder.aliasKeys以支援比對多個快取金鑰。
- 修正:讓
RequestDisposable具備執行緒安全性。 - 修正:
RoundedCornersTransformation現在先裁剪至目標大小,然後將角落圓角化。 - 修正:
CircleCropTransformation現在從中心裁剪。 - 修正:將多個裝置加入硬體位元圖黑名單。
- 修正:將可繪製對象轉換為位元圖時保持長寬比。
- 修正:修正
Scale.FIT下可能發生的記憶體快取遺漏。 - 修正:確保
Parameters的疊代順序是確定的。 - 修正:建立
Parameters與ComponentRegistry時進行防禦性拷貝。 - 修正:確保
RealBitmapPool的maxSize>= 0。 - 修正:若
CrossfadeDrawable未在動畫中或已完成,則顯示起始可繪製對象。 - 修正:調整
CrossfadeDrawable以考慮具有未定義原生大小的子項。 - 修正:修正
MovieDrawable縮放不正確的問題。
- 更新 Kotlin 至 1.3.61。
- 更新 Kotlin 協同程式 至 1.3.3。
- 更新 Okio 至 2.4.3。
- 更新 AndroidX 相依性:
androidx.exifinterface:exifinterface-> 1.1.0
[0.8.0] - 2019 年 10 月 22 日
- 破壞性變更:已移除
SvgDrawable。取而代之的是現在由SvgDecoder將 SVG 預先渲染為BitmapDrawables。這使得 SVG 在主執行緒上的渲染成本大幅降低。此外,SvgDecoder現在在其建構函式中需要一個Context。 - 破壞性變更:
SparseIntArraySet擴充函式已移至coil.extension套件。
- 新增:支援設定個別請求的網路標頭。 詳情請見此處。
- 新增:加入新的
ParametersAPI 以支援透過影像管線傳遞自訂資料。 - 新增:在
RoundedCornersTransformation中支援個別角落半徑。感謝 @khatv911。 - 新增:加入
ImageView.clear()以支援主動釋放資源。 - 新增:支援從其他套件載入資源。
- 新增:為
ViewSizeResolver加入subtractPadding屬性,以啟用/停用測量時減去視圖的內邊距 (padding)。 - 新增:改進
HttpUrlFetcher的 MIME 類型偵測。 - 新增:為
MovieDrawable與CrossfadeDrawable加入Animatable2Compat支援。 - 新增:加入
RequestBuilder<*>.repeatCount以設定 GIF 的重複次數。 - 新增:將位元圖池建立功能加入公開 API。
- 新增:使用
@MainThread註解Request.Listener方法。
- 修正:讓
CoilContentProvider在測試中可見。 - 修正:在資源快取金鑰中包含深色模式。
- 修正:透過暫時將來源寫入磁碟來避開
ImageDecoder原生崩潰。 - 修正:正確處理聯絡人顯示相片 URI。
- 修正:將色調 (tint) 傳遞給
CrossfadeDrawable的子項。 - 修正:修正多個未關閉來源的案例。
- 修正:加入具有損壞或不完整硬體位元圖實作的裝置黑名單。
- 使用 SDK 29 編譯。
- 更新 Kotlin 協同程式 至 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 協同程式 至 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 日
- 初始版本。
