前幾天和朋友聊到了APP清除數據這塊,聊到了清除數據都會清掉哪些數據,咱們每一個人的手機在」設置–>應用管理」裏面,選擇任意一個App,都會看到兩個按鈕,一個是清除緩存,另外一個是清除數據,那麼當咱們點擊清除緩存的時候清除的是哪裏的數據?當咱們點擊清除數據的時候又是清除的哪裏的數據?今天在這裏驗證一下。數據庫
在學習以前咱們首先要搞懂內存、內部存儲、外部存儲的概念,內存,咱們在英文中稱做memory,內部存儲,咱們稱爲InternalStorage,外部存儲,咱們稱爲ExternalStorage,他們的區別在於:緩存
內存
內存是指手機運行程序時佔用的內存,也叫RAM(簡稱運存)。RAM基本是固定不變的,手機買下來是多少就是多少,好比是4G運行內存,那麼你的手機運行時候系統能夠利用的內存最高也就是4G了,這個有別於電腦的內存(電腦內存能夠經過添加內存條來增長RAM大小從而提高運行效率/速度),簡而言之,理論上的手機運行內存越大,系統運行的越流暢。微信
內部存儲
data文件夾就是咱們常說的內部存儲,(路徑爲:/data/data/包名)當咱們打開data文件夾以後(沒有root的手機不能打開該文件夾),裏邊有兩個文件夾值得咱們關注,以下:網絡
app文件夾:app文件夾裏存放着咱們全部安裝的app的apk文件,其實,當咱們調試一個app的時候,能夠看到控制檯輸出的內容,有一項是uploading …..就是上傳咱們的apk到這個文件夾,上傳成功以後纔開始安裝。app
data文件夾:這個文件夾裏邊都是一些包名,打開這些包名以後咱們會看到這樣的一些文件:學習
data/data/包名/shared_prefs //SharedPreferences存儲的數據,以XML格式存儲到本地
data/data/包名/databases //數據庫存儲的數據,db格式的文件
data/data/包名/files //普通數據的存儲
data/data/包名/cache //緩存文件的存儲
存儲在這裏的文件咱們都稱之爲內部存儲。存儲在內部存儲的數據都會隨着APP的卸載而清除。測試
外部存儲
,外部存儲通常就是咱們上面看到的storage文件夾,固然也有多是mnt文件夾,這個不一樣廠家有可能不同。測試使用的手機目錄爲(/storage/emulated/0/)。這個文件夾中的文件又分爲兩類,一類是公有目錄,還有一類是私有目錄。.net
公有目錄:調試
Environment.getExternalStoragePublicDirectory(String DirName) /storage/emulated/0/DirName
Environment.DIRECTORY_MUSIC /storage/emulated/0/Music
Environment.DIRECTORY_PODCASTS /storage/emulated/0/Podcasts
Environment.DIRECTORY_RINGTONES /storage/emulated/0/Ringtones
Environment.DIRECTORY_ALARMS /storage/emulated/0/Alarms
Environment.DIRECTORY_NOTIFICATIONS /storage/emulated/0/Notifications
Environment.DIRECTORY_PICTURES /storage/emulated/0/Pictures
Environment.DIRECTORY_MOVIES /storage/emulated/0/Movies
Environment.DIRECTORY_DOWNLOADS /storage/emulated/0/Download
Environment.DIRECTORY_DCIM /storage/emulated/0/DCIM
Environment.DIRECTORY_DOCUMENTS /storage/emulated/0/Documents
私有目錄
私有目錄就是Android這個文件夾,這個文件夾打開以後裏邊有一個data文件夾,打開這個data文件夾,裏邊有許多包名組成的文件夾。
例:/storage/emulated/0/Android/data/包名視頻
經常使用方法
通過上面的分析,你們已經明白了,什麼是內部存儲,什麼是外部存儲,以及這兩種存儲方式分別存儲在什麼位置,通常來講,咱們不會本身去操做內部存儲空間,沒有root權限的話,咱們也無法操做內部存儲空間,事實上內部存儲主要是由系統來維護的。不過在代碼中咱們是能夠訪問到這個文件夾的。因爲內部存儲空間有限,在開發中咱們通常都是操做外部存儲空間,Google官方建議咱們App的數據應該存儲在外部存儲的私有目錄中該App的包名下,這樣當用戶卸載掉App以後,相關的數據會一併刪除。
內部存儲方法 獲取的目錄
getFilesDir() /data/data/packagename/files
getCacheDir() /data/data/packagename/cache
外部存儲方法 獲取的目錄
getExternalCacheDir() /storage/emulated/0/Android/data/包名/cache
getExternalFilesDir() /storage/emulated/0/Android/data/包名/files
getExternalStorageDirectory() /storage/emulated/0
getExternalStoragePublicDirectory(String DirName) /storage/emulated/0/DirName
getExternalFilesDir(String DirName) /storage/emulated/0/Android/data/包名/files/DirName
getExternalStorageState() 獲取外部存儲狀態(可用狀態Environment.MEDIA_MOUNTED)
文件存儲的路徑分爲兩種,一類是路徑中含有包名的,一類是路徑中不含有包名的,含有包名的路徑,由於和某個App有關,因此對這些文件夾的訪問都是調用Context裏邊的方法,而不含有包名的路徑,和某一個App無關,咱們能夠經過Environment中的方法來訪問。
在瞭解了三種存儲的概念以後,再回過頭來看清除數據和清除緩存就容易理解了。
清除數據
清除數據主要是清除用戶配置,好比SharedPreferences、數據庫等等,這些數據都是在程序運行過程當中保存的用戶配置信息,清除數據後,下次進入程序就和第一次進入程序時同樣;
清除緩存
緩存是程序運行時的臨時存儲空間,它能夠存放從網絡下載的臨時圖片,從用戶的角度出發清除緩存對用戶並無太大的影響,可是清除緩存後用戶再次使用該APP時,因爲本地緩存已經被清理,全部的數據須要從新從網絡上獲取,注意:爲了在清除緩存的時候可以正常清除與應用相關的緩存,請將緩存文件存放在getCacheDir()或者 getExternalCacheDir()路徑下。好比對微信清除緩存,則聊天記錄、朋友圈緩存的用戶頭像、圖片、文字等信息都會被清除掉,清除緩存後再次進入微信時你會發現消息記錄被清空了,朋友圈的圖片和用戶頭像須要加載一會才能正常顯示。
一鍵清理
一鍵清理是系統級別的功能,它主要是殺後臺進程,以達到釋放內存的目的,APP緩存的數據並不會被清理掉。殺掉哪些進程和清理時設置的重要值閾值有關,重要值越大說明進程重要程度越低,若是在清理時某個進程的重要值大於該閾值,該進程就會被殺掉。好比微信等應用在後臺,一件清理後會將微信和與之相關的服務都殺掉(有的服務作了特殊處理,殺不死!!!)。
總結
爲了讓程序被卸載後不在文件系統中留下毫無關聯的無用文件,建議將應用相關的配置和緩存文件存放在程序被卸載時會刪掉的文件夾下面(音樂文件、視頻文件、圖片、電子書這種適合多個應用閱讀和瀏覽的文件除外),具體路徑有:
/data/data/package/
getFilesDir()
getCacheDir()
getExternalCacheDir()(是否可以在程序被卸載時被刪除與API的等級有關)
getExternalFilesDir()(是否可以在程序被卸載時被刪除與API的等級有關)
轉載--------------------- 做者:oudetu 來源:CSDN 原文:https://blog.csdn.net/oudetu/article/details/78664514 版權聲明:本文爲此博主原創文章,轉載請附上博文連接!