Android内部存储与外部存储解析
Android開發(fā)的過程中。經(jīng)常會涉及到存儲,之前一直沒有一個整體的概念,這篇文章就是進(jìn)行一個知識點(diǎn)的梳理。
Android的存儲有:內(nèi)部存儲、外部存儲。
想要了解這兩個概念,我們先將開發(fā)軟件中的DDMS打開,看File Explorer,如下:
1、內(nèi)部存儲
上邊的data文件夾,就是內(nèi)部存儲。data文件夾中有兩個重要的文件夾app、data。
app文件夾存放著我們所有已安裝的軟件的apk文件。
data文件夾存放以包名命名的文件夾。每個文件夾里是:
/data/data/包名/shared_prefs
/data/data/包名/databases
/data/data/包名/files
/data/data/包名/cache
這四個文件夾,其中SharePreferenced的數(shù)據(jù)就是存在shared_prefs中。軟件中的數(shù)據(jù)庫文件就是存在databases中,普通文件存在files中,緩存存在cache中。
在內(nèi)部存儲中的數(shù)據(jù),當(dāng)相關(guān)的軟件刪除時,會被同時刪除。
2、外部存儲
圖中的mnt文件夾就是外部存儲,不同的手機(jī)生產(chǎn)廠商對應(yīng)的文件夾還可能是storage文件夾。在storage文件夾中還有一個文件夾sdcard。這個就是我們平時調(diào)用獲取外部存儲api時獲取文件夾。在這個文件夾中公有目錄和私有目錄。公有目錄有九大類。私有目錄只有Android這一個,里邊也是以包名為目錄的。
在很多文章中說,內(nèi)部存儲就是手機(jī)自帶的內(nèi)存、手機(jī)出廠時已經(jīng)有的內(nèi)存。外部存儲就是通過擴(kuò)展SD卡的功能后增加的存儲卡,這種是不正確的。
早期的Android設(shè)備,的確內(nèi)部存儲時自帶的、固定的。但是后來的手機(jī)將自身的存儲擴(kuò)展到了8G以及更高,許多手機(jī)也不再提供擴(kuò)展SD卡功能。這時就只是在概念上把手機(jī)的存儲劃出了內(nèi)部存儲和外部存儲。所以不管有沒有SD卡,都有內(nèi)部存儲和外部存儲。但是不管什么情況,訪問內(nèi)部存儲和外部存儲都用的同一套Android Api。
在外部存儲中的數(shù)據(jù),當(dāng)卸載軟件時,該軟件存在私有目錄/data/storage/Android/data/包名/ 下的數(shù)據(jù)將全部刪掉。軟件存在公有目錄下的數(shù)據(jù)不會被刪掉。
3、存儲空間的操作
操作內(nèi)部存儲空間和外部存儲空間的私有目錄時,以context獲取的。操作外部存儲空間時,以Environmnet獲取。方法總結(jié)如下:
內(nèi)部存儲
| /data/data/包名/files | context.getFilesDir() |
| /data/data/包名/cache | context.getCacheDir() |
外部存儲
| 根目錄 | Environment.getExternalStorageDirectory() |
| 公有目錄(九大公有目錄) | Environment.getExternalStoragePublicDirectory(String type) |
| 私有目錄 /data/storage/Android/data/包名/files | context.getExternalFilesDir(String type) |
| 私有目錄 /data/storage/Android/data/包名/cache | context.getExternalCacheDir() |
其中,公有目錄的type類型,我們查看源碼:
可以看出九種類型是:
| Environment.DIRECTORY_MUSIC | 音樂保存的位置 |
| Environment.DIRECTORY_PODCASTS | 用于保存podcast(博客)的音頻文件 |
| Environment.DIRECTORY_RINGTONES | 保存鈴聲的位置 |
| Environment.DIRECTORY_ALARMS | 警報(bào)的鈴聲 |
| Environment.DIRECTORY_NOTIFICATIONS | 通知音保存的位置 |
| Environment.DIRECTORY_PICTURES | 下載的圖片保存的位置 |
| Environment.DIRECTORY_MOVIES | 電影保存的位置 |
| Environment.DIRECTORY_DOWNLOADS | 下載文件保存的位置 |
| Environment.DIRECTORY_DCIM | 相機(jī)拍攝的圖片和視頻保存的位置 |
其中,context.getExternalFilesDir(String type)的類型有7種,看主要源碼:
可以看出七種類型是:
| Environment.DIRECTORY_MUSIC | 音樂保存的位置 |
| Environment.DIRECTORY_PODCASTS | 用于保存podcast(博客)的音頻文件 |
| Environment.DIRECTORY_RINGTONES | 保存鈴聲的位置 |
| Environment.DIRECTORY_ALARMS | 警報(bào)的鈴聲 |
| Environment.DIRECTORY_NOTIFICATIONS | 通知音保存的位置 |
| Environment.DIRECTORY_PICTURES | 下載的圖片保存的位置 |
| Environment.DIRECTORY_MOVIES | 電影保存的位置 |
注意:這個方法是可以傳一個null的參數(shù)的,表示獲取的是當(dāng)前目錄。如果傳入類型,則獲取的是對應(yīng)的子目錄。
下邊給出一個對上邊講述方法進(jìn)行運(yùn)用的一個工具類:
這篇博客是一篇學(xué)習(xí)總結(jié),如有錯誤的地方,請大家指正。
總結(jié)
以上是生活随笔為你收集整理的Android内部存储与外部存储解析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 股票每天交易时间是几点到几点
- 下一篇: Android 应用内启动第三方应用