Android存储相关
Android存储包括内部存储和外部存储。
内部存储
英文:Internal Storage,属于系统自带存储空间的一部分,在手机内部。具体说就是除了后文要提到的 非ROOT下能看到并且读取的目录 外的所有手机内部的存储。
对于应用开发来说,内部存储主要关注以下2个目录:
- /data/app : 应用程序安装的目录
- /data/data: 该目录存放应用程序的私有数据
应用的安装目录
应用安装的时候,系统 PMS (PackageManagerService) 进程会将 apk 文件复制到这个目录。
应用的私有目录
应用安装完成之后,Android 系统都会在 /data/data
目录下用应用包名作为名字自动创建一个文件夹,这个文件夹就是应用的私有目录。
常用的私有目录有:
cache (
/data/data/应用包名/cache
)
存放应用的缓存信息。获取 API :1
context.getCacheDir()
shared_prefs (
/data/data/应用包名/shared_prefs
)
存放应用的 SharedPreferences信息,常用API:1
2
3
4// 获取指定的 SharedPreferences 对象
context.getSharedPreferences(name,mode)
// 删除指定的 SharedPreferences
context.deleteSharedPreferences(name)databases (
/data/data/应用包名/databases
)
存放应用的数据库信息。常用 API:1
2
3
4
5
6// 获取 database 目录
context.getDataDir()
// 获取指定数据库对象
context.getDatabasePath(dbName)
// 删除指定数据库对象
context.deleteDatabase(dbName)files (`/data/data/应用包名/files)
存放应用的文件信息,常用API:1
2
3
4
5
6// 获取 files 目录
context.getFilesDir()
// 删除指定文件对象
context.deleteFile(fileName)
// 获取所有文件对象
context.fileList()
注意:应用卸载的时候,系统会自动删除应用的私有目录及其内容。
其他
除开上边应用开发常用的,还有几个获取内部存储根目录的方法也会经常用到:
1 | // 获取 /data 目录 |
外部存储
英文:External Storage。
外部存储不仅仅指我们的SD卡,它包含SD卡、U盘等等可加载、移除的存储介质,以及在手机内部非ROOT下能看到并且读取的内部存储。
保存在外部存储的文件是全局可读写的文件,当手机通过USB连接到计算机并以传输文件后,可由用户修改这些文件。
外部存储在Android 文件系统中是 /sdcard
目录,这只是个快捷方式,真正的目录是 /storage/emulated/0
文件夹,链接过程如下:
/sdcard -> /storage/self/primary -> /mnt/user/0/primary -> /storage/emulated/0
如下图:
编程中获取外部存储的接口有如下一些:
1 | // 获取外部存储目录(/storage/emulated/0) |
应用私有目录
除了上边这些,还有个可供App操作的外部存储目录(App私有目录),存储路径为:
1 | /sdcard/Android/data/应用包名 |
操作的API:
1 | // 对应目录/sdcard/Android/data/应用包名/files |
注意:默认情况下,系统不会自动创建外部存储空间的应用私有目录,只有在应用开发人员在需要的时候,通过 Android SDK 提供的 API 去创建和操作目录和文件内容。
这个私有目录在用户卸载 APP 时,系统会自动删除,不会留下垃圾。