RAM(Random-Access Memory)
类比电脑的内存,断电后数据会被清除。
ROM:
可以理解为系统;
内部存储:(/data分区)
存储系统文件和应用的私有文件,首选 项,数据库等文件。路径为/data/data/ ...,可通过Environment.getDataDirectory().getPath()方法获取;
外部存储:( /sdcard分 区)
路径一般为:/storage/emulated/...,可通过Environment.getExternalStorageDirectory().getPath()方法获取;
sd卡亦属于外部存储,或者称为二级外部存储
SharedPreferences
以键值对形式进行存储,数据以xml形式存储在/data/data/包名/shared_prefs/中;
===========================================================
内部存储
直接在设备的内部存储中保存文件。默认情况下,保存到内部存储的文件是应用的私有文件,其他应用(和用户)不能访问这些文件。 当用户卸载应用时,这些文件也会被移除。
Context.getCacheDir():/data/data/包名/cache
Context.getFilesDir():/data/data/包名/files
外部存储
该存储可能是可移除的存储介质(例如 SD 卡,二级)或内部(不可移除,一级)存储。 保存到外部存储的文件是全局可读取文件,而且,在计算机上启用 USB 大容量存储以传输文件后,用户可修改这些文件。存储分为两种,一种是应用卸载后,存储数据也会被删除,一种永久存储,即使应用被卸载,存储的数据依然存在。
外部存储私有 想应用被卸载后,与该应用相关的数据也清除掉,可
通过Context.getExternalFilesDir()方法可以获取到 sdcard/Android/data/包名/files/目录,放一些长时间保存的数据
通过Context.getExternalCacheDir()方法可以获取到 sdcard/Android/data/包名/cache/目录,存放临时缓存数据
使用上面的方法,当应用在被用户卸载后,SDCard/Android/data/包名/
这个目录下的所有数据都会被删除,不会留下垃圾信息。
而且上面二个目录分别对应 设置->应用->应用详情里面的”清除数据“与”清除缓存“选项
外部存储一般 想要做到应用卸载后数据仍然保存,则
Environment.getExternalStorageDirectory().getAbsolutePath()
Environment.getExternalStoragePublicDirectory(Environment. ...).getAbsolutePath()
public String getDiskCacheDir(Context context) {
String cachePath = null;
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) || !Environment.isExternalStorageRemovable()) {
cachePath = context.getExternalCacheDir().getPath();
} else {
cachePath = context.getCacheDir().getPath();
}
return cachePath;
}
Environment.getDataDirectory() = /data
Environment.getDownloadCacheDirectory() = /cache
Environment.getExternalStorageDirectory() = /mnt/sdcard
Environment.getExternalStoragePublicDirectory(“test”) = /mnt/sdcard/test
Environment.getRootDirectory() = /system
getPackageCodePath() = /data/app/com.my.app-1.apk
getPackageResourcePath() = /data/app/com.my.app-1.apk
getCacheDir() = /data/data/com.my.app/cache
getDatabasePath(“test”) = /data/data/com.my.app/databases/test
getDir(“test”, Context.MODE_PRIVATE) = /data/data/com.my.app/app_test
getExternalCacheDir() = /mnt/sdcard/Android/data/com.my.app/cache
getExternalFilesDir(“test”) = /mnt/sdcard/Android/data/com.my.app/files/test
getExternalFilesDir(null) = /mnt/sdcard/Android/data/com.my.app/files
getFilesDir() = /data/data/com.my.app/files