安卓APP开发中的重要环节:数据和文件存储概述
安卓使用一个文件系统,这个系统与其它平台上基于磁盘的
文件系统是相似的.为了存储你的APP数据,系统提供了一些选项.
一 存储的类型
特定APP的存储
仅仅你的APP专用的存储文件,或者是被声明为一个内部存储卷
的目录,或者是外部存储的不同目录.使用内部存储目录存储其它
APP不能读取的敏感信息。读取方法是getFilesDir(),getCacheDir()
getExternalFilesDir(),getExternalCacheDir().
共享的存储
你的APP要和其它的APP共享的存储文件,包括媒体文件,文档,和其它文件。
读取方法是MediaStoreAPI,存储读取框架
配置信息
以键值对的形式,存储私有的,个性化的数据。
使用方法是Jetpack配置信息库。
数据库
使用Room持久化库在一个私有的数据库中,存储结构化的数据。
二 决定存储方案的问题集
你选择的解决方案依赖于你的特殊的需求。
你的数据需要多大的空间?
对于特定的APP数据,内部存储提供的空间非常有限,如果你需要存储
大量的数据,要使用其它类型的存储。
你的数据的读取需要多么可靠?
如果你的APP的基础功能需要一点数据,例如当你的APP启动时,这时需要
的数据应该放在内部存储目录上或者是数据库中。特定APP的文件放在外部
存储上的话,并不总是能够读取到,因为一些设备允许用户移除外部存储
对应的物理设备。
你需要存储什么类型的数据?
对于结构化的数据,你使用配置信息(键值对数据)或者是一个数据库
(包括两个字段以及更多字段的数据)
对于你的APP,数据应该是私有的吗?
当存储敏感数据时,应该使用内部存储,配置信息或者是一个数据库。
内部存储对于用户不可见的数据有额外的帮助。
三 存储位置的类型
安卓提供了两种类型的存储位置:内部存储和外部存储。
在绝大多数的设备,都是内存远小于外存的存储空间。然而,
内存总是在所有的设备中可用,你的APP依赖的数据应该放在更加可靠
的位置上。
出现在文件系统中的可移除的卷,例如SD卡,作为外存储的一部分。
安卓使用一个路径表示这些设备,例如 /sdcard
APP自身默认被存储在内存中,如果你的APK的规模非常大的话,你能用
APP的配置文件做出一个个性化的配置信息,让你的APP安装在外存上。
四 对外存的权限和读取
安卓定义了存储相关的权限:READ_EXTERNAL_STORAGE,WRITE_EXTERNAL_STORAGE,
MANAGE_EXTERNAL_STORAGE.
安卓早期的版本,写和读都要APP显式的申请权限。
后期版本的安卓,更依赖于文件的目的,而不是文件的位置来决定
APP的读和写的能力。尤其是,如果你的APP适配安卓11(API 第30级)
或者更高版本,WRITE_EXTERNAL_STORAGE权限对于你的APP的读取存储没有
任何的影响。这个基于目的的存储模型提升了用户的隐私。因为APP仅被允许
读取它实际使用的设备文件系统的区域。