Android 内外部存储详解

参考: Android应用的文件存储目录

内部存储空间中的应用私有目录

Data/data 目录这个文件夹用于 App 中的 WebView 缓存页面信息,SharedPreferences 和 SQLiteDatabase 持久化应用相关数据等。对于没有 Root 过的手机,普通用户是无法查看 data/data 目录内容的。

1.getFilesDir();
2.getCacheDir();
3.deleteFile();
4.fileList();

注意:当用户卸载 App 时,系统自动删除 data/data 目录下对应包名的文件夹及其内容

外部存储空间中的应用私有目录

由于内部存储有限,普通用户不能直接查看到等,Android提供了外部存储空间提供了存放私有文件。 用户可以查看到,并且存错比较大。

/storage/emulated/0/Android/data/app package name

与内部存储空间的应用私有目录不同的是:

  1. 默认情况下,系统并不会自动创建外部存储空间的应用私有目录。只有在应用需要的时候,开发人员通过 SDK 提供的 API 创建该目录文件夹和操作文件夹内容。
  2. 自 Android 7.0 开始,系统对应用私有目录的访问权限进一步限制。其他 App 无法通过 file:// 这种形式的 Uri 直接读写该目录下的文件内容,而是通过 FileProvider 访问。
  3. 宿主 App 可以直接读写内部存储空间中的应用私有目录;而在 4.4 版本开始,宿主 App 才可以直接读写外部存储空间中的应用私有目录,使开发人员无需在 Manifest 文件中或者动态申请外部存储空间的文件读写权限。

而相同点在于:同属于应用私有目录,当用户卸载 App 时,系统也会自动删除外部存储空间下的对应 App 私有目录文件夹及其内容。

	getExternalFilesDir()
	getExternalCacheDir()
Environment.getExternalStorageDirectory();需要向用户申请操作权限:

对于外部存储空间下的应用私有目录文件,由于普通用户可以自由修改和删除,开发人员在使用时,一定要做好判空处理和异常捕获,防止应用崩溃退出!

外部存储空间中的公共目录

无论是内部存储空间,还是外部储存空间,上述两个应用私有目录由于其特有的生命周期(随着应用卸载而自动清除)只适合存储应用相关数据。

而应用无关信息,比如说下载了张图片等信息。用户在删除应用,信息可以保留的,放在存储空间的公共目录。

Environment.getExternalStorageDirectory();

私有目录保存应用相关数据,公共目录保存应用无关数据

做好分类保存,便于统一清除管理,实际上清除的是应用相关数据,也就是私有目录下的

外部存储空间上的内容可能被用户手动删除,或者卸载SD卡的不确定因素,操作前需要Environment去检测是否还有剩余空间,文件是否存在,做好异常捕获。

Advertisements
Android 内外部存储详解

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s