Android Internal和External Storage

Internal和External Storage

所有的Android设备都有两个文件存储区域:Internal Storage和 External Storage.

名字产生背景

早期的Android设备是由一个内置不可变的,手机都内置(Permanent)一块较小存储板即Internal Storage和一个可移(Removable)的,外置的存储媒介(External Storage,比如SD卡)组成的.
现在有的设备只有一个存储区域,他们将将最初定的“Internal Storage”,即内置存储,分成Internal和External两个分区,这样就不管什么设备都会统一有Internal和External两个分区.
API的行为也就跟是否有可移除的存储媒介无关了.这两总分区的特点总结如下:

区别 Internal storage External storage
可见性 一直可见 不总是可见,mount了就可见,remove了就不可见
访问权限 保存在这里的文件默认只有对应app才能访问 其他app共享
卸载表现 保存在此的与app相关的文件会被删除 保存在这里的文件除了在getExternalFilesDir()和getExternalCacheDir()文件夹之外,都会保留
权限 无需 需 WRITE_EXTERNAL_STORAGE权限 (注意:getExternalFilesDir()和getExternalCacheDir()这两个路径无需权限)
适用条件 app私有数据 存放的数据不需要访问限制,为了分享数据或允许其他用户访问

使用贴士

通过Context.getExternalFilesDir()方法可以获取到 SDCard/Android/data/应用包名/files/ 目录,一般放一些长时间保存的数据
通过Context.getExternalCacheDir()方法可以获取到 SDCard/Android/data/应用包名/cache/目录,一般存放临时缓存数据

如果使用上面的方法,当你的应用在被用户卸载后,SDCard/Android/data/应用包名/ 这个目录下的所有文件都会被删除,不会留下垃圾信息。
上面二个目录分别对应 设置->应用->应用详情里面的”清除数据“与”清除缓存“选项

一些路径的标准写法

Environment.getExternalStorageDirectory() = /mnt/sdcard

context.getExternalFilesDir() = /mnt/sdcard/Android/data//files

context.getExternalCacheDir() = /mnt/sdcard/Android/data//cache

context.getFilesDir() = /data/data//files

context.getCacheDir() = /data/data//cache

你可能感兴趣的:(Android Internal和External Storage)