2014-10-05 155 views
0

我編寫了一個Xamarin應用程序,並從網上檢索圖像並將它們加載到GridView中。我不希望每次都下載圖片,而是希望加快這一過程。我收集我需要緩存圖像。將圖像緩存到磁盤

緩存基本上只是將圖像保存到文件,並且當想要顯示圖像時,從文件而不是從網絡中檢索圖像?

是下列正確的:

  1. 檢查本地文件存在
  2. 檢查本地文件具有網絡文件
  3. 如果大小是不同的大小相同,獲取和保存新文件從網上,然後加載新的文件
  4. 如果大小相同,加載本地保存的文件

是公關這麼簡單嗎?有沒有可以解釋所有需要完成的設計模式或教程?

在此先感謝

+0

這就是它。不過,我會比較圖片的日期,而不是大小(HTTP會很好地調整)。如果你想使它線程安全,還要注意同步。 – 2014-10-05 08:14:54

+0

我想用一些用戶資源的異步加載代碼。你有什麼建議,我應該明確研究?我目前正在查看ImageLoader。 – user3736648 2014-10-05 09:23:31

+0

如果您正在談論Android資源,您爲什麼不使用Android資源機制?如果不夠流暢,請在任務中加載它以從資源加載圖像,然後在UI線程中分配它。 – 2014-10-05 16:46:55

回答

1

爲了有效的緩存圖片,你從需要下載圖像的服務器支持的協議,以幫助您緩存。其中一個用於Web緩存最普遍接受的標準協議是ETag

http://en.wikipedia.org/wiki/HTTP_ETag

下面是它如何工作的:

1)您請求http://someurl.com/image.jpg

2)服務器與響應的圖像圖像,並在響應標題中,會出現ETag的一些標識符的值:abc123

3)將圖像保存到本地存儲以及ETag值。

4)下一次您從同一個URL請求圖片時,您會傳遞一個新標題; If-None-Match與ETag值保存ABC123

5)如果圖像或內容沒有改變,那麼服務器會返回狀態代碼304 Not Modified迴應,而你只是顯示你在本地保存的圖像。如果圖像已更改,則服務器將響應狀態碼200和新的ETag值,並按照通常情況下替換緩存副本的方式下載圖像。

+0

HTTP還具有額外的頭文件,例如'Expires'和'Max-Age',允許客戶端在一段時間內使用緩存的圖像,而無需像上面的步驟4和5中的Mike概述那樣執行條件獲取。 – 2014-10-14 06:56:13