数据和文件存储预览
安卓系统使用的文件系统与其他平台上面基于磁盘的文件系统十分类似, 系统提供了几种选项让你能够保存你的程序的数据
- 应用程序特别存储(App-specific storage): 无论是存储在内部存储设备的专用目录,还是外部设备的其它目录,存储的文件只有你的程序可以使用。使用内部存储来其它程序不应该访问的存储敏感信息
- 共享存储(Shared storage): 存放一些你的程序想要分享给其它程序的数据,包括媒体,文档和其它类型的文件
- 偏好(Preferences): 通过键值对形式存放私有的原始的数据
- 数据库(Database): 使用
Room
这个持久化类来存储私有的原始的结构化数据
下面👇的表格中整理了一下上面👆几种选择
-- | 内容类型 | 获取方法 | 是否需要权限? | 其它程序可以访问吗? | 程序卸载后文件是否被移除? |
---|---|---|---|---|---|
应用程序专用存储 | 这些文件只有你的程序可以使用 | 存储在内部设备中通过: getFileDir()或者getCacheDir(),存储在外部设备中通过getExternalFileDir()或getExternalCacheDir() | 对于内部存储设备,不需要权限,外部设备不需要权限的必要条件是你的设备运行Android 4.4(API level 19)或者更高 | 如果文件存储在内部设备的目录中,其它程序无法访问,如果是存储在外部设备的目录中,其它程序可以访问 | 是 |
多媒体 | 共享媒体文件(图片,音频,视频) | MediaStore API | 在Android10以及更高版本中需要READ_EXTERNAL_STORAGE 或者WRITE_EXTERNAL_STORAGE , 在Android9以下需要所有文件权限 |
可以,其它程序需要READ_EXTERNAL_STORAGE 权限 |
否 |
文档和其它文件 | 其它类型的共享内容,包括下载的文件 | 存储访问框架(Storage Access Framework) | 不需要 | 可以,通过系统的文件管理获取 | 否 |
程序偏好 | 键值对 | JetPack Preferences库 | 否 | 不能 | 是 |
数据库 | 结构化数据 | Room persistance库 | 不需要 | 否 | 是 |
采用哪种解决方案取决于你的明确的需要。
你的数据需要多少空间
内部存储限制了你的程序的特别存储数据, 如果你需要存储大量数据,建议使用其他类型的存储.
好看(♥∀♥)
(●´∀`●)ノ