美文网首页代码片段分享
Android 手机存储问题及权限

Android 手机存储问题及权限

作者: 花艺荣 | 来源:发表于2019-12-06 17:09 被阅读0次
    • 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
    

    相关文章

      网友评论

        本文标题:Android 手机存储问题及权限

        本文链接:https://www.haomeiwen.com/subject/wlqegctx.html