### 影片介紹 - 介紹如何在 Android 中使用 Coil 和 Jetpack Compose 實現圖片快取。 - 目的是解決多圖圖片 URL 載入時造成的效能問題,避免每次顯示圖片時都進行網路請求。 ![CleanShot 2025-03-05 at 18.55.20](https://hackmd.io/_uploads/HkIi6irsJl.png) ### 什麼是圖片快取 - 圖片快取可以幫助存儲圖片,避免每次載入時都重新請求網路。 - 會將圖片存儲在設備上,但不會永久保留,僅是暫存,便於下次快速存取。 ### 如何使用 Coil 顯示圖片 - 使用 `AsyncImage` composable 來顯示圖片,必須提供圖片 URL 和內容描述。 - 設置圖片的最大寬度和適當的長寬比來顯示圖片。 ### Coil 的快取機制 - Coil 支援內存快取和磁碟快取。 - 內存快取:儲存在 RAM 中,讀取速度較快,但資料在應用退出後會被清除。 - 磁碟快取:儲存在設備磁碟中,即使應用退出,資料仍然可以持久保存。 ### 自定義圖片載入設定 ![CleanShot 2025-03-05 at 18.58.40](https://hackmd.io/_uploads/H1SORsSi1g.png) - 可以通過自定義 `ImageLoader` 來設置不同的快取策略和配置。 - 使用 `Application` 類型的 `ImageLoaderFactory` 來定義全局的圖片載入設置。 ### 設置內存快取和磁碟快取 - 內存快取:可以設置為啟用、禁用、只讀或只寫,預設為啟用。 - 磁碟快取:可以設置最大儲存空間百分比,並指定快取目錄。 ![CleanShot 2025-03-05 at 18.59.27](https://hackmd.io/_uploads/BJOpCiSske.png) ### 管理圖片快取 - 可以手動清除快取,清除所有快取或指定圖片的快取。 - 若需要清除單一圖片的快取,可使用圖片的 URL 作為快取鍵。 ### 清除單一圖片的快取 - 使用 `clear` 方法可清除所有快取,使用 `remove` 方法可以只清除特定圖片的快取。 ![CleanShot 2025-03-05 at 19.02.19](https://hackmd.io/_uploads/SknSkhHoJg.png) ![CleanShot 2025-03-05 at 19.03.33](https://hackmd.io/_uploads/Skzqk3Hoyl.png) ### 顯示進度條 - 當圖片從網路載入時,Coil 支援顯示圓形進度條。 ![CleanShot 2025-03-05 at 19.04.36](https://hackmd.io/_uploads/r1-CkhSiJl.png) ### 結語 - 此影片內容適合需要在 Android 中使用圖片快取的開發者,並介紹了 Coil 快取的基本用法和自定義配置。 # Terminology - **Image Caching**:將圖片存儲在記憶體或磁碟上,避免每次重新載入時重新發送網路請求。 - **Coil**:一個輕量級的 Android 圖片加載與緩存庫,專為 Jetpack Compose 設計。 - **Jetpack Compose**:Android 的現代 UI 工具包,使用 Kotlin 語言來構建界面。 - **AsyncImage**:Jetpack Compose 中的圖片加載組件,用於非同步加載圖片並顯示。 - **Memory Cache**:將圖片暫存於設備的記憶體中,加快圖片的存取速度。 - **Disk Cache**:將圖片存儲在設備的磁碟中,確保即使重新啟動應用也能保持緩存。 - **HTTP Request**:客戶端向伺服器發送的請求,要求獲取特定資源(如圖片)。 - **Lazy Loading**:延遲加載的技術,只有當內容出現在視窗中時才會加載圖片或資料。 - **Image URL**:指向圖片的網路資源位置。 - **Image Loader**:用於配置和管理圖片加載過程的組件,支援不同的圖片格式與緩存策略。 - **Singleton**:一種設計模式,確保某個類別只有一個實例,並提供全局訪問點。 - **Application Class**:Android 應用的入口類,用於初始化應用級別的設置或配置。 - **Context**:Android 中的一個核心物件,提供應用環境的訪問(如文件、資源等)。 - **Image Loader Factory**:一個工廠接口,用於創建自定義的圖片加載器配置。 - **Cache Policy**:設定緩存行為的規則,例如是否啟用緩存或是只讀緩存。 - **Memory Cache Policy**:設置記憶體緩存的策略,定義如何存取和儲存圖片。 - **Max Size Bytes**:定義緩存中可以存儲的最大圖片大小,通常以位元組為單位。 - **Weak References**:允許垃圾回收器回收的物件參考,當記憶體緊張時有助於釋放資源。 - **Strong References**:不允許被垃圾回收器回收的物件參考,保持物件在記憶體中。 - **Disk Cache Builder**:配置磁碟緩存的工具,設置最大容量、緩存目錄等。 - **Disk Cache Directory**:指定磁碟緩存的存儲位置,通常是設備的緩存目錄。 - **Cleanup Dispatcher**:磁碟緩存清理操作的調度器,用於管理緩存的清理流程。 - **Bitmap Config**:設置位圖的配置選項,影響圖片的顯示效果與內存占用。 - **Hardware Acceleration**:利用硬體來加速圖片處理的過程,提升效能。 - **Call Factory**:用於創建和配置網路請求的工廠,支援自定義的 HTTP 請求標頭或其他設置。 - **Authorization Header**:在 HTTP 請求中使用的標頭,用於傳遞身份驗證資訊(如 token)。 - **Debug Logger**:用於記錄應用內部狀態和行為的日誌工具,有助於調試問題。 - **Image Cache Key**:圖片緩存中與圖片對應的唯一鍵,用於標識和檢索圖片。 - **Clear Cache**:清除緩存中的所有圖片,通常在用戶登出時或重設應用時使用。 - **Remove Cache**:從緩存中移除指定的圖片,通常通過提供圖片的 URL 或唯一鍵來進行。 - **Memory Cache Key**:記憶體緩存中與圖片對應的唯一鍵,用於查找和移除圖片。 - **Network Request**:從伺服器獲取資料或資源的請求,通常通過 HTTP 協議進行。 - **Aspect Ratio**:圖片的寬高比,決定圖片的顯示比例。 - **Content Description**:圖片的描述文字,對於無障礙功能至關重要,提供語音提示。 - **Image Size**:圖片的解析度或維度,通常由寬度和高度表示。 - **Internet Permission**:應用在 Android 中訪問網際網路所需的權限。 - **App Relaunch**:重新啟動應用程序,通常用於測試緩存行為或重新加載資源。 - **Manifest File**:Android 應用的配置文件,定義應用所需的權限、服務、活動等。 - **Memory Cache Clear**:清除記憶體緩存中的圖片,釋放 RAM 空間。 - **Cache Directory**:磁碟緩存的存儲位置,通常是設備的緩存目錄。 - **Cache Size**:緩存佔用的空間大小,會影響應用的性能與存儲使用。 - **Subcomposition**:將複雜組件拆分為子組件的技術,使得 UI 更加高效與可維護。 - **Circular Progress Indicator**:圓形進度條,顯示圖片加載過程中的進度。 - **Lazy Loading Strategy**:延遲加載策略,圖片只有在需要顯示時才會從網路或緩存中加載。 - **URL Key**:基於圖片 URL 生成的唯一鍵,用於在緩存中查找圖片。