1. 程式人生 > >圖片的三級快取機制

圖片的三級快取機制

一、什麼是三級快取?

  1. 一級: 記憶體中的快取圖片物件(Bitmap), 用Map<url, Bitmap>
  2. 二級: 手機sd卡的files或手機內部的files中快取圖片檔案(xxx.jpg/png)
  3. 三級: 伺服器端儲存圖片檔案

二、如何使用三級快取?

如何根據url根據圖片顯示?

 

  1. 根據url從一級快取中取出對應的Bitmap物件,
  • . 如果有, 直接顯示
  • . 如果沒有進入進入步驟2
  1. 根據url從二級快取中得到Bitmap物件(從url中取出檔名到files資料夾下載入圖片檔案),
  • . 如果有, 直接顯示, 並儲存到一級快取
  • . 如果沒有進入③
  1. 根據Url請求服務(三快取)獲取Bitmap物件, 需要啟動分執行緒請求, 顯示代表正在載入的圖片
  1. . 如果有

顯示圖片

儲存到一級快取

儲存二快取

  1. . 如果沒有:
     顯示代表錯誤的圖片

三、在ListView中使用圖片三級快取的問題?

  1. 問題: 快速滑動時item中圖片有閃動(顯示錯誤圖片)
  2. 原因: connvertView被複用了
  3. 解決: 檢查檢視是否已經被複用, 如果複用了不載入圖片/不顯示圖片
  • 如何檢查?

a. 每次getView()中都會將當前的imagPath儲存到ImageView(tag)

b. 判斷前面傳入的imagePath和ImageView中儲存的ImagePah是否相同

  • 在哪檢查?

a. 在分執行緒準備請求伺服器之前

b. 在主執行緒準備顯示圖片之前

 

 

本教程由尚矽谷教育大資料研究院出品,如需轉載請註明來源