**[我的博客](https://zhaozhenye.github.io/)**
大家在用Android手機(jī)的時(shí)候肯定都遇到過內(nèi)存剩余空間越來越小的情況;內(nèi)存小的手機(jī),如果安裝新應(yīng)用的時(shí)候,系統(tǒng)有時(shí)候甚至?xí)崾灸阆螺d軟件再安裝;這時(shí)候我們可以打開手機(jī)應(yīng)用管,進(jìn)入軟件管理,我們能看到清除數(shù)據(jù)和清除緩存的選項(xiàng),通過這種方式我們可以釋放不必要的內(nèi)存空間,加速手機(jī)的運(yùn)行速度,開辟新的使用空間;我們今天就看看我們點(diǎn)擊的清除數(shù)據(jù)和清除緩存到底是清除了哪些文件?
為了看的更加具體,我們分兩種情況看:sd卡正常掛載和sd不正常的情況(沒有SD卡或者SD卡掛載不正常)
首先我們先看一下Android手機(jī)應(yīng)用緩存和數(shù)據(jù)存儲(chǔ)的位置:
//sd卡的路徑
Log.i(TAG,"getExternalStorageDirectory: "+ Environment.getExternalStorageDirectory().getAbsolutePath());
//SD卡加載狀態(tài)
Log.i(TAG,"getExternalStorageState: "+ Environment.getExternalStorageState());
//有SD卡的情況:應(yīng)用的緩存目錄
Log.i(TAG,"getExternalCacheDir: "+this.getExternalCacheDir().getAbsolutePath());
//無SD卡的情況:應(yīng)用的緩存目錄
Log.i(TAG,"getCacheDir: "+this.getCacheDir().getAbsolutePath());
//有SD卡的情況:應(yīng)用的存儲(chǔ)目錄
Log.i(TAG,"getExternalFilesDir: "+this.getExternalFilesDir("test").getAbsolutePath());
//無SD卡的情況:應(yīng)用的存儲(chǔ)目錄
Log.i(TAG,"getFilesDir: "+this.getFilesDir().getAbsolutePath());
接下來我們看log打印的結(jié)果:

我的測(cè)試應(yīng)用包名是:com.zzy
根據(jù)日志信息我們能夠清楚地看到:
SD的路徑:/storage/emulated/0?
SD卡的掛載狀態(tài):mounted-->正常加載的狀態(tài)值
有SD卡的情況:緩存路徑:/storage/emulated/0/Android/data/com.zzy/cache
無SD卡的情況:緩存路徑:/data/data/com.zzy/cache
有SD卡的情況 :下載路徑:/storage/emulated/0/Android/data/com.zzy/files/test
無SD卡的情況:下載路徑:getFilesDir: /data/data/com.zzy/files
現(xiàn)在我們已經(jīng)能夠清楚知道我們清楚數(shù)據(jù)和清除緩存的具體位置了;
當(dāng)我們卸載應(yīng)用的時(shí)候,系統(tǒng)會(huì)把data/應(yīng)用包名 ?下面的files目錄和cahe目錄全部自動(dòng)刪除掉。但是如果我們把文件下載在SD卡的根路徑,系統(tǒng)不會(huì)幫我們回收,需要用戶手動(dòng)刪除,因此,優(yōu)秀的程序員都應(yīng)考慮良好的用戶體驗(yàn),即使由于某種原因卸載了我們的應(yīng)用,我們還是應(yīng)該在對(duì)應(yīng)用數(shù)據(jù)位置進(jìn)行最優(yōu)的存儲(chǔ):臨時(shí)數(shù)據(jù)存放在cache目錄下,持久化的數(shù)據(jù)存儲(chǔ)在files;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 紙上得來終覺淺,絕知此事要躬行