圖片的三級快取機制
阿新 • • 發佈:2018-12-28
一、什麼是三級快取?
- 一級: 記憶體中的快取圖片物件(Bitmap), 用Map<url, Bitmap>
- 二級: 手機sd卡的files或手機內部的files中快取圖片檔案(xxx.jpg/png)
- 三級: 伺服器端儲存圖片檔案
二、如何使用三級快取?
如何根據url根據圖片顯示?
- 根據url從一級快取中取出對應的Bitmap物件,
- . 如果有, 直接顯示
- . 如果沒有進入進入步驟2
- 根據url從二級快取中得到Bitmap物件(從url中取出檔名到files資料夾下載入圖片檔案),
- . 如果有, 直接顯示, 並儲存到一級快取
- . 如果沒有進入③
- 根據Url請求服務(三快取)獲取Bitmap物件, 需要啟動分執行緒請求, 顯示代表正在載入的圖片
- . 如果有
顯示圖片
儲存到一級快取
儲存二快取
- . 如果沒有:
顯示代表錯誤的圖片
三、在ListView中使用圖片三級快取的問題?
- 問題: 快速滑動時item中圖片有閃動(顯示錯誤圖片)
- 原因: connvertView被複用了
- 解決: 檢查檢視是否已經被複用, 如果複用了不載入圖片/不顯示圖片
- 如何檢查?
a. 每次getView()中都會將當前的imagPath儲存到ImageView(tag)
b. 判斷前面傳入的imagePath和ImageView中儲存的ImagePah是否相同
- 在哪檢查?
a. 在分執行緒準備請求伺服器之前
b. 在主執行緒準備顯示圖片之前
本教程由尚矽谷教育大資料研究院出品,如需轉載請註明來源