Android 文件系统与Android11 分区存储
发布日期:2021-05-14 01:35:52 浏览次数:17 分类:精选文章

本文共 1181 字,大约阅读时间需要 3 分钟。

Android 文件系统与分区存储深入解析

一、Android 文件系统概述

Android 文件系统的存储方式通常分为 <strong>内部存储(internal storage)</strong><strong>外部存储(external storage)</strong> 两种:

  • 内部存储:通常 reserved 为应用程序自己私有的存储区域。文件路径示例:data/user/0/packageName
  • 外部存储:Android 系统会为应用自动创建私有存储区域。文件路径示例:storage/emulated/0/android/data/packageName

需要注意的是,内外部存储的文件在应用卸载或清除数据时,会被系统删除。

二、分区存储(Scoped Storage)的功能解析

Android 10 版本中,Google 推出了 分区存储(Scoped Storage)的功能,主要针对内置的外部存储实现:

  • 背景问题

    许多应用在外部存储的根目录下创建自己的文件夹(如:storage/emulated/0/***),这种做法存在以下问题:

  • 新增文件时,应用的默认容量不会增加
  • 应用卸载后,相关目录下的文件不会被删除,可用于持久化存储
  • 可能导致大量垃圾文件存在
  • 信息安全隐患:只要获得读写权限,其他应用即可访问外部存储的任意目录
  • 分区存储实现

    通过分区存储,应用可以自定义自己的私有目录,避免与其他应用直接竞争资源:

    • 私有文件目录路径:storage/emulated/0/android/data/packageName/
    • 获取方法:调用Context#getExternalFilesDir()

三、分区存储的适配与应用开发注意事项

1. 旧版存储位置迁移策略
  • Android 11

    在 AndroidManifest.xml 中设置preserveLegacyExternalStorage 属性为 true,才能在覆盖安装时访问旧版存储位置。卸载重装会导致失效。

  • Android 10

    同样需要在 AndroidManifest.xml 中设置requestLegacyExternalStorage 属性为 true,但覆盖安装才能访问旧版存储位置,卸载重装会失效。在 Android 11 系统中需要组合设置才能正常工作。

  • Android 9 及以下

    可以正常迁移文件,默认支持从外部存储根目录迁移至应用私有存储区域。对于需要共享的媒体文件,可以迁移到媒体存储位置。

2. 正确使用读写 API
  • 外部存储:文件读写应仅在应用私有目录下完成。
  • 媒体文件:使用MediaStore API访问公共目录(如:DCIM、Music、Movie)。
  • 非媒体文件:向用户提供文件选择器SAF(系统文件选择器),以确保安全性。
上一篇:iOS UISwitch控件
下一篇:Objective-C NS_OPTIONS与NS_ENUM的区别与格式

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月14日 02时11分46秒