官方定義的 internal , external storage
外存:只要是 data/app 目錄底下以外的都稱為 外存,因為 App 無法掌控其他目錄底下的資料。
內存:data/app 目錄底下在 Android 才是被定義成 內存。
官方對於 external storage 有分兩個層級,私有外存與公有外存。
公有外存:這些檔案可以被其他的 App 所使用,甚至當 App 被解除安裝後,這些檔案還是會存在。(ex:相片)
私有外存:這些檔案只屬於 App,當 App 被解除安裝後,這些檔案會被刪除,但是這些檔案可以透過一些技巧讓外部的 APP存取 或者 使用者存取。
接著來介紹一下幾種檔案目錄
Internal Storage:從下圖可以看到 Context.filesDir.parent 與 Context.fileDir ,所以 App 的私有目錄是在 /data/user/0 …..;這底下的資料是只有 App 本身可以存取。
Cache Storage:他也是屬於 Internal Storage,比較需要注意的一點是當系統記憶體較低時,會把 Cache Storage 的東西刪除。
External Storage:Environment.getExternalStoragePublicDirectory ,他有幾種公開的路徑可以選擇詳細內容請查官網(https://developer.android.com/reference/android/os/Environment#DIRECTORY_PICTURES),這些檔案可以被其他的 App 所存取。
External Private Storage:this.getExternlFilesDir(null),這裡面的檔案,當 App 被解除安裝時,這些檔案會被移除,可以用其他的方式讓外部 App 及 使用者 存取。
External Storage:Environment.getExternalStorageDirectory ,取得 External Storage 的 root 目錄。
External Storage:this.externalCacheDir,是 external 的 cache 檔案,與 internal cache 一樣,但是有幾點要注意,這些 cache 檔案除了 time 檔案,其餘的檔案皆不會被自動刪除,由於是 external 的檔案,有可能因為使用者拔除 SD 卡之類的導致檔案遺失。
External Storage:this.externalMediaDirs[0].toURI().toString(),回傳的是一個 Array,裡面有 App Media 的絕對路徑。