Android存储空间知识整理

Android的文件存储分为内部存储和外部存储
1.内部存储位于一个很特殊的位置,在内部存储中的文件只能被自己的应用访问到,每个应用的文件和数据都存储在内部存储中与自己应用包名相同的文件目录中。
2.当应用卸载后,其位于内部存储中的数据就被清除了。
3.app直接可以互相访问对方在内部存储中的数据,前提是要直到对方app的完整包名。
4.内部存储是系统本身和系统应用存储数据的重要位置,一旦内部存储用尽,系统就无法使用了。
5.内部存储一般用Context来获取和访问
6.获取内部存储的路径的方法
    Environment.getDataDirectory()        //获取内部存储的根路径
    Context.gitFilesDir().getAbsolutePath()        //获取某个应用在内部存储中的files路径
    Context.getCacheDir().getAbsolutePath()        //获取某个应用在内部存储中的cache路径 
    Context.getDir("myFile", MODE_PRIVATE).getAbsolutePath()    //获取某个应用在内部存储中的自定义路径 

7.外部存储在4.4版本的android系统之前和系统之后的定义是有较大区别的
    4.4版本之前的android系统将手机出厂自带的存储卡作为内部存储,而将插入的SD卡作为外部存储
    4.4版本之后的android系统则不是这样区分的,因为内置的存储卡现在容量越来越大,因此,4.4版本以后的外部存储一部分在内部的存储卡上,然后包括外部插入的存储卡
        如果使用getExternalFilesDirs函数可以获取一个或者多个外部存储路径,例如:
        /storage/emulated/0/Android/data/packname/files/mounted 
        /storage/B3E4-1711/Android/data/packname/files/mounted 
        那么,/storage/emulated就是内部存储卡上作为外部存储的部分,而/storage/B3E4-1711则是外部SD卡在文件系统中的挂载点。
        前者成为主要外部存储,后者成为次要外部存储,这两部分统称外部存储。
8.获取外部存储的路径的方法
    Environment.getExternalStorageDirectory().getAbsolutePath()            //获取外部存储的根路径
    Environment.getExternalStoragePublicDirectory("").getAbsolutePath()     //获取外部存储的根路径
    Context.getExternalFilesDir("").getAbsolutePath()            //获取某个应用在外部存储的files路径
    Context.getExternalCacheDir("").getAbsolutePath()            //获取某个应用在外部存储的cache路径

9.函数如何区分机器自带存储卡上的外部存储和实际SD卡的外部存储
    getExternalFilesDir和getExternalCacheDir函数的参数,如果是Environment.MEDIA_MOUNTED表示是SD卡,为空函数表示是机身自带存储中的外部存储。

10.访问权限
    4.4以后的系统对于访问外部存储没有权限限制(需要代码验证)
    
11.便携式存储设备
    便携式存储是指未被系统合并的任何外部存储设备,未被格式化,加密,Android6.0支持合并外部存储,使其向内部存储一样使用,合并外部存储设备时,系统对其进行格式化和加密处理。
    当插入新的外部存储设备的时候,系统会询问想如何使用该外部存储设备,用户可以选择合并来对该外部存储进行格式化加密,也可以不合并,只对其进行简单的访问操作。
    合并的外部存储设备必须使用支持POSIX权限和拓展属性(ext4,f2fs)的文件系统进行格式化,
        合并的重点概念:合并的外部存储设备在给格式化加密后,只能都在当前设备上运行,因此可以在该外部存储上放心存放私人隐私数据了。

12.cache和system,data和storage目录
    这些目录中,system和data目录是存在内部存储,cache和storage是存在外部存储。
    其中download目录用来存放下载的文件

13.应用在内部存储中的目录分类
    /data/${USERID}/${PACKAGENAME}/目录下存放应用的目录和数据,一般有如下几个目录:
    cache        用来存放缓存数据
    database    用来存放用到的sqlite数据库文件
      shared_prefs     存放应用生成和修改的shared_preference数据(键值对)
    files  用来存放普通数据,如log,json数据等
    
14.什么是app专属文件
    专属文件是属于某个app的,其文件路径是带有包名的,当app卸载的时候,它们会随着一起被删除,当在设置界面中手动删除某个应用的数据时,删除的就是这部分数据
    
15.如何判断设备是否有外部存储
    if(MEDIA_MOUNTED.equals(Environment.getExternalStorageState()))

16.清除数据和清除缓存的区别
    清除数据是对应内部和外部存储中的应用的files目录中的数据
    清除缓存是对应内部和外部存储中的应用的cacge目录中的数据,其是APP运行过程中所产生的临时数据

17.为什么不建议使用绝对路径存放应用app数据
    因为应用app的数据目录(缓存目录也一样)会随着app迁移到外部存储而发生变化,因此建议使用相对路径。

18.内部存储控件不需要申请权限

19.外部存储控件中的公共目录:
    一般来说,系统已经提供了几个默认的公共目录,通过类型参数调用Environment.getExternalStoragePublicDirectory函数可以访问到这些目录
    公共目录的类型参数有如下几类:
        Music
        Movies
        Pictures
        Download
    用户也可以用自己的类型去调用该函数来访问自定义类型的公共目录
    很重要的一点是,公共目录也是对多用户隔离的
    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章