安卓规范了在android/data文件夹存放缓存信息,厂商应该设置自动清理这些内容,但是很多app要么不在这个文件夹下存放缓存,要么不自动清理,然后垃圾就一直堆。
Android 本身提供了 /data/data/<包名> 这样的内部目录和 /sdcard/Android/data/<包名> 这样的外部目录用于存储 APP 运行时的关键数据。
// 获得 /sdcard/Android/data/com.tencent.mobileqq/files/head 目录的字符串
String path = getExternalFilesDir("head").getAbsolutePath();
Google官方建议我们App的数据应该存储在外部存储的私有目录中该App的包名下,这样当用户卸载掉App之后,相关的数据会一并删除,如果你直接在/storage/sdcard目录下创建了一个应用的文件夹,那么当你删除应用的时候,这个文件夹就不会被删除。
image.png
大家看到,有包名的路径我们都是调用Context中的方法来获得,没有包名的路径,我们直接调用Environment中的方法获得,那么其中有两个方法需要传入一个String类型的参数,这个参数我们使用了Environment中的常量,参数的意思是我们要访问这个路径下的哪个文件夹。
总结一波,在外部存文件时,应该选择data/data/包名下。这样程序卸载后文件自动被删除。
网友评论