Android存储扩展学习-----应用的清除数据和清除缓存

前几天和朋友聊到了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 版权声明:本文为此博主原创文章,转载请附上博文连接!

相关文章
相关标签/搜索