概述
虽说做Android两年了,可是对于一些基础的知识还是不甚了解。比如说Android的内存(Memory)、手机存储、内部存储(InternalStorage)和外部存储(ExternalStorage)。今天我们就来说一说存储的事!
问题
开始之前,先说说我们常遇到的存储问题!
1. 什么是内存、手机存储、内部存储,外部存储?
2. 内部存储和外部存储的区别是什么?
3. 应用数据在内部和外部存储是怎么保存的?
4. 手机的“设置”—>“应用管理”中的“删除数据”和“清空缓存”是什么意思?
分析
内存、手机存储、内部存储和外部存储的概念
内存(RAM):也叫运行内存,决定了设备的运行速度。应用与cpu进行沟通的媒介,主要负责运行程序和保存程序运行过程中产生的临时数据,断电后会清空。
手机存储(ROM):机身存储,即设备内嵌存储器容量大小。保存用户所有信息。
内部存储(第一层含义):内置存储器存储 - 系统所占存储;手机“设置”—>”存储”—>”内部存储”即是指这种,早期的Android设备的内部存储指的就是这种。
内部存储(第二层含义):内置存储器存储 - 系统所占存储 - 内置存储器外部存储,开发常说的内部存储指的就是这种。
外部存储:包括内置存储器外部存储和SD卡或USB存储等外嵌存储。
历史回顾
在早期的时候,Android设备的内部存储是指嵌在设备内部的存储器存储(即手机存储 - 系统所占存储),外部的SD卡或USB存储设备就是外部存储(即SD卡存储+USB存储);
但是后来随着技术的发展,内嵌存储器容量也越来也大,一些中高端设备就将设备内嵌的存储器划分为“内部”和“外部”存储。也就是说:
内部存储 = 机身存储 - 系统所占存储 -内置存储器外部存储
外部存储 = 内置存储器外部存储(primary external storage) + SD/USB存储 (secondary external storage)
这也是我们目前开发中所说的内部和外部存储的概念。
存储结构图
内部和外部存储的差异
内部存储针对不同版本的Android系统来说,位置都是固定的,即/data/data/包名,可通过Environment.getDataDirectory()获取。外部存储根据api及厂家默认的位置的不同,路径也有所不同。api大于18(Android4.3)的内置外部存储是/storage/emulated/0,外置外部存储的位置是/storage/sdcard1。对于api小于18的,内置外部存储路径是/mnt/sdcard;外置外部路径笔者没有获取到,哪位朋友知道的话可以告诉小弟一声。外部存储可分为公共区和私有区,公共区就是所有应用都可访问,一般保存一些图片,视频,音频之类的,系统每天也能扫描到。私有区就是专属应用自身的,因为私有区本身也属于外部存储,其他应用也能访问到,不过该目录下一般保存应用特有数据,其他应用获取意义不大。
相关函数说明
函数 | 路径 | 意义 |
---|---|---|
Environment.getRootDirectory() | /system | 系统目录 |
Environment.getDataDirectory() | /data | 用户数据目录 |
Context.getPackageCodePath() | /data/app/com.everyoo.functionmodule-1.apk | 应用包代码路径 |
Context.getPackageResourcePath() | /data/app/com.everyoo.functionmodule-1.apk | 应用包资源路径 |
Environment.getExternalStorageState() | mounted | 外部存储的状态 |
Environment.getExternalStorageDirectory() | /mnt/sdcard或/storage/sdcard0 | 外部存储目录 |
Environment.getExternalStoragePublicDirectory(int type) | /mnt/sdcard/Picuture(根据type而定) | 外部存储公共区目录 |
Context.getExternalFilesDir(int type) | /mnt/sdcard/Android/data/com.everyoo.functionmodule/files/Pictures | 外部存储私有区目录 |
Context.getFilesDir() | /data/data/com.everyoo.functionmodule/files | 内部存储之文件 |
Context.getCacheDir() | /data/data/com.everyoo.functionmodule/cache | 内部存储之缓存 |
参考资料
彻底理解android中的内部存储与外部存储 http://www.androidchina.net/4106.html
保存文件https://developer.android.com/training/basics/data-storage/files.html?hl=zh-cn