关于Android内部的存储空间,记忆很暧昧,每次都是现用现查。
今天又遇到了,借此机会系统的总结一下。
路径取得方法 | APP 专用 |
非root 用户可见 |
删除方法 | APP 卸载时 |
|
---|---|---|---|---|---|
内部数据空间 | Context.getFilesDir() | yes | no | 主动删除 | 消失 |
内部缓存空间 | Context.getCacheDir() | yes | no | 清空缓存 | 消失 |
外部数据空间 | Context.getExternalFilesDir() | yes | yes | 主动删除 | 消失 |
外部缓存空间 | Context.getExternalCacheDir() | yes | yes | 清空缓存 | 消失 |
外部公開空间 (通常是/sdcard) |
Environment.getExternalStorageDirectory() | no | yes | 无法删除 | 不消失 |
外部公開共享空间 | Environment.getExternalStoragePublicDirectory() | no | yes | 无法删除 | 不消失 |
缓存空间没有大小限制。
内部空间只有APP自己可以访问,其他APP和手机用户都不可以见。卸载消失。
外部空间 APP自己,手机用户,其他授权APP可以访问。卸载消失
公開空间,所有APP都可以访问。卸载不消失。
以下作为补充阅读,看了会晕。
External 的字眼非常容易让人误会。根据字面联想,容易让人是手机外置空间(SD卡,外置硬盘之类)。
其实是指系统storage以外的storage的意思。
用getExternalXXXX()方法取得的空间有可能是 SD卡空间,也有可能还是手机内置存储空间。APP这边是无法控制的。
getExternalStorageDirectory取到的一般是/sdcard空间,但是不是绝对的,编程的时候需要注意。
如下面所示,根据手机不同,实际取到的路径也是不一样的。所以不要用绝对路径,要通过Context或者Enviroment来取。
206SH(Android4.2.2)
# 各种路径
Context.getFilesDir() :/data/data/com.example/files
Context.getCacheDir() :/data/data/com.example/cache
Context.getExternalCacheDir() :/storage/sdcard0/Android/data/com.example/cache
Context.getExternalFilesDir() :/storage/sdcard0/Android/data/com.example/files
Environment.getExternalStorageDirectory()