应用信息里的"清除数据"和"清除缓存"到底删除的是哪个目录

前言
应用信息里的
cache.png

一直以来, 应用信息里的"清除数据"和"清除缓存"到底删除的是哪个目录里的数据, 虽不是什么大的问题, 却一直迷惑着我, 今天就来总结一下这个缺漏的知识点.

"清除数据" 对应的目录, 以及代码中的调用API.
/data/data/com.hola.weather/files ---> String path = this.getFilesDir().getPath();

如果有SD卡的话, 系统还会自动为每个app在SD卡上创建相应的目录

/sdcard/Android/data/com.hola.weather/files  ---> String path = this.getExternalFilesDir(null).getPath();
"清除缓存" 对应的目录, 以及代码中的调用API.
/data/data/com.hola.weather/cache ---> String path = this.getCacheDir().getPath();

如果有SD卡的话, 系统还会自动为每个app在SD卡上创建相应的目录

/sdcard/Android/data/com.hola.weather/cache  ---> String path = this.getExternalCacheDir().getPath();
实际开发中的应用

应用在运行的过程中如果需要向手机上保存数据,在存在SD卡的情况下, 优先选择保存到SD卡中.
有些应用选择在SD卡的根目录下创建一个文件夹,然后把数据保存在该文件夹中。eg. /sdcard/holavideowallpaper
这样当该应用被卸载后,这些数据还保留在SD卡中,留下了垃圾数据。如果你想让你的应用被卸载后,与该应用相关的数据也清除掉,就不要这么做.
正规的做法是在
/sdcard/Android/data/com.hola.weather/files
目录下, 创建文件夹来保存数据.

并且额外再提一句, 保存视频文件时, 不要以.mp4作为后缀, 因为Android的媒体库会定期扫描SD卡上的媒体文件, 并以ContentProvider的形式给其他应用提供数据, 这样做就会对外暴露这些本来应该是私有的文件.
正确的做法是把 "abc.mp4"取MD5值, 用这个MD5值作为文件名进行保存.

--- DONE. ----

你可能感兴趣的:(应用信息里的"清除数据"和"清除缓存"到底删除的是哪个目录)