2011-09-16 38 views
1

在我的應用程序中,我有一些網址使用這些網址,我從網上下載圖像並在我的應用程序中使用這些圖像。在哪裏存儲這些圖像?因爲我的應用程序有很多圖像在那裏。建議最好的方式,即這種方式沒有機會得到「內存不足的例外」。請問任何人都可以幫助我。android - 在哪裏存儲下載的圖像

我用下面的方法是好還是壞。有人可以建議我嗎?

  1. 使用URL的我從網上下載圖像,並在下載時間我在SD卡上創建這些圖像的目錄。將這些圖像與網址名稱保存在SD卡中。如果圖像名稱存在於目錄中,則圖像將從SD卡中取出。否則會從網上下載。好嗎?

感謝

+0

好主意,這個 –

+0

你的方式看起來不錯,以我的代碼。我相信這是大多數人將要去的方式。 – PH7

+0

關於sdcad的商店是個好主意。好方法。 – user370305

回答

5

作爲每Saving cache files從Android顯影劑,使用Context.getExternalCacheDir()(API級別8)或Environment.getExternalStorageDirectory() + /Android/data/<package_name>/cache/(API級7或更低)作爲位置來存儲高速緩存文件。

如果您有不同的緩存,請爲每個緩存添加一個子目錄。

上述兩種方法都在您應用程序的「私人」數據空間中,並會隨着您的應用程序一起被刪除 - 這是件好事,當您的應用程序不在時,您不希望在設備上使用空間。

此外,不要使用URL direclty作爲文件名,請創建一個摘要/散列並使用它,如iosched app does。這使您無需自己轉義URL中的任何特殊字符。

+0

請你可以發送該代碼?以及如何刪除該空間 – naresh

+0

您可以在上面的iosched鏈接中看到哈希代碼。 –

+0

當用戶卸載時,當您將文件存儲在Context.getExternalCacheDir()或Environment.getExternalStorageDirectory()+/Android/data//cache /中時,您不必自己做任何事情你的應用程序(或使用系統設置中的「清除數據」按鈕),Android系統將自動*刪除你的文件。 –

0

如果圖像過大,應該永久留在設備上(當然,除非用戶想要刪除它們),這個方法是最好的。但是,如果圖片很小,並且不一定要留在設備上,我建議將它們存儲在應用程序緩存中,並在用戶退出應用程序後清除緩存。您甚至可以嘗試在特定於應用程序的數據庫中推送圖像。

+0

如何存儲在應用程序緩存中? – naresh

+0

@Philipp的答案會幫助你。 – SamSPICA

1

以下是我在應用對象用於創建外部緩存目錄

@SuppressLint("NewApi") 
     private File setupExternalCacheDir() { 
        File extCacheDir; 

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO) { 
         extCacheDir = getExternalCacheDir(); 
        } else { 
         extCacheDir = new File(Environment.getExternalStorageDirectory(), "/Android/data/" + getPackageName() + "/cache/"); 
         extCacheDir.mkdirs(); 
        } 

     return extCacheDir; 

    }