2010-04-01 40 views
2

我有一個嚴重基於遠程圖像的應用程序。它們通常與ListView中的一些數據一起顯示。許多這些圖像是新的,許多舊圖像將不會再被看到。用於清潔SD卡上圖像緩存目錄的解決方案

我目前將所有這些圖像存儲在自定義緩存目錄(ala evancharlton的magnatune應用程序)中的SD卡上。

我注意到大約10天后,目錄總計〜30MB。這比我預期的要多得多,這讓我相信我需要提出一個清理舊文件的好方案......我想不出一個好的解決方案。也許你可以幫忙。這些是我的想法:

  1. 刪除舊文件。當應用程序啓動時,啓動後臺線程,並刪除所有超過X天的文件。這似乎是一個問題,但是,如果用戶主動使用應用程序,這可能會導致設備呆滯,如果有數百個文件要刪除。

  2. 在SD卡上創建文件後,請致電new File("/path/to/file").deleteOnExit();這將導致所有文件在VM退出時被刪除(我甚至不知道此方法是否適用於Android)。這是可以接受的,因爲即使需要爲會話緩存文件,它們也不需要爲下一個會話緩存。看起來如果在虛擬機退出時有很多文件需要刪除,這也會降低設備速度。

  3. 刪除舊文件,達到最大文件數量。與#1相同,但一次只能刪除N個文件。我不太喜歡這個想法,如果用戶非常活躍,它可能永遠無法趕上並保持緩存目錄清潔。

這就是我所擁有的一切。任何建議,將不勝感激。

回答

2
  1. 不要一次全部刪除它們。每隔幾秒鐘刪除一個,用戶可能不會注意到。
  2. 虛擬機在Android上不能正常退出,因此deleteOnExit()將不可靠。
  3. 參見上面的#1。

您也可以考慮使用AlarmManager安排上午凌晨的刪除工作。這有一個額外的好處,即CPU的命中上限 - 任何在後臺運行真正的上限爲CPU的10%左右,所以即使用戶在當時正在使用該設備,這項工作也不會影響用戶。在刪除東西時,您需要使用WakeLock以使設備保持清醒狀態。一種可能性是使用我的WakefulIntentService來解決這個問題,因爲它解決了讓設備保持清醒狀態並讓它在主應用程序線程上執行刪除操作的問題。

+0

我將使用WakefulIntentService和AlarmManager。好主意 - 謝謝! – synic 2010-04-01 02:23:58