【Android 文件管理】分区存储 ( 分区存储机制 和 文件索引数据 )

简介: 【Android 文件管理】分区存储 ( 分区存储机制 和 文件索引数据 )

文章目录

一、Android 10 以前的存储机制

二、Android 10 及以后的分区存储机制

三、Android 10 中的存储过渡方案

四、文件索引数据库

五、相关文档资料





一、Android 10 以前的存储机制


Android 10 1010 之前的文件系统 , 内存分为两块 , 应用私有目录 , 和 共享存储空间 ;


私有目录 : 只能保存本应用的数据 , 其它应用无法读写该目录中的数据 , 应用卸载时 , 该目录自动删除 ;


共享存储空间 : 所有的应用都可以随意访问 , 随意读写该区域内的数据 , 数据可以任意放置 , 删除 , 修改 ; 应用卸载时写出到该区域的数据不会被删除 ;



任何目录可以存储任何类型文件 , 可以将图片存储到 Movies , 视频存储到 Music 目录中 ;



共享存储空间 绝对是个 天坑 , 能不用尽量不用 ;






二、Android 10 及以后的分区存储机制


Android 10 1010 及以后的文件系统 :


私有目录 : 与之前保持一致 , 只能保存本应用的数据 , 其它应用无法读写该目录中的数据 , 应用卸载时 , 该目录自动删除 ;


共享存储空间 : Google 官方对该存储区域进行了统一规划 , Android 11 1111 中 , 每个目录存储什么类型的文件 , 都有相应规范 , 文件不能乱放置 ;



文件存储类型限制 : 文件一旦放错位置 , 就会抛异常 ;


专门存储 图片文件 的目录 Pictures , 只能存放图片 , 不能存放其它类型文件 ,


专门存储 视频文件 的目录 Movies , 只能存视频文件 ;


专门存储音频文件的目录 Music , 只能存储音频文件 ;


专门存储文档文件的目录 Document , 只能存储文档相关文件 ;


Download 目录可以放置任何类型的文件 ;






三、Android 10 中的存储过渡方案


Android 10 1010 版本是过渡版本 , 在该版本中可以选择启用分区存储 , 也可以选择不用 , 在清单文件的 application 节点设置 requestLegacyExternalStorage=“true” 属性可以设置 不启用 分区存储 方案 , 但是 在 Android 11 1111 中 必须 启用分区存储 , 否则应用不能兼容 Android 11 1111 系统 ;



Android 10 1010(API 级别 29 2929)及之前的系统版本 , 操作文件时 , 使用的 File 类 , 该类只支持传统的存储方式 , 不支持分区存储 ;


Android 11 1111(API 级别 30 3030)中不能使用 File 进行文件操作 , 只能使用 MediaStore 进行文件操作 ;



参考文档 - 暂时停用分区存储 : https://developer.android.google.cn/training/data-storage/use-cases#opt-out-scoped-storage






四、文件索引数据库


Android 11 1111(API 级别 30 3030) 之后的存储机制 : Android 中所有文件存储 , 都会将文件的索引存储在数据库中 , 在 /data/data/com.android.providers.media 目录下的文件就是专门用于管理该数据库的 ;


在 /data/data/com.android.providers.media 目录下有 4 44 个目录 , cache , code_cache , databases , shared_prefs , 其中 databases 就是存储的上述文件索引数据库 , 有两个数据库文件 : external.db , internal.db ;



查看命令 :


walleye:/ # cd  /data/data/com.android.providers.media
walleye:/data/data/com.android.providers.media # ls
cache code_cache databases shared_prefs
walleye:/data/data/com.android.providers.media # cd databases
walleye:/data/data/com.android.providers.media/databases # ls
external.db internal.db
walleye:/data/data/com.android.providers.media/databases #


image.png


将 external.db 数据库拷贝出来 , 使用 SQLite 查看工具查看该数据库 , 该数据库中有一张 files 数据表 , 就是存放文件索引的 , 只有开启分区存储时 , 才将所有的文件都保存在该数据库表中 ;


生成文件索引 :


在老版本的文件系统中 , 只有将文件放在 Pictures , Movies , Music , Document 等目录下时 , 才生文件索引放在数据库中 , 在 SD 卡其它位置创建文件 , 不会生成文件索引 ;


在新版本的分区存储中 , 上述数据表中管理所有 SD 卡上的文件 , 所有的文件和目录都会显示在上述数据库中 ;



external.db 数据库 files 数据表字段简介 :


_id : 每个文件都会被赋予一个 id , 不会重复 ;


tittle : 文件名称 , 一般是文件的完整名称去掉文件后缀 ;


_display_name : 文件的完整名称 , 带后缀 ;


mime_type : 文件的 MIME 类型 ;







五、相关文档资料


Android 文件处理参考文档 :


数据和文件存储概览 : https://developer.android.google.cn/training/data-storage


访问应用专属文件 : https://developer.android.google.cn/training/data-storage/app-specific#kotlin


保存到共享的存储空间 : https://developer.android.google.cn/training/data-storage/shared


管理存储设备上的所有文件 : https://developer.android.google.cn/training/data-storage/manage-all-files


分享文件 : https://developer.android.google.cn/training/secure-file-sharing


应用安装位置 : https://developer.android.google.cn/guide/topics/data/install-location


Android 存储用例和最佳做法 : https://developer.android.google.cn/training/data-storage/use-cases


FileProvider : https://developer.android.google.cn/reference/androidx/core/content/FileProvider


目录
相关文章
|
1月前
|
存储 安全 Android开发
探索Android与iOS的隐私保护机制
在数字化时代,移动设备已成为我们生活的一部分,而隐私安全是用户最为关注的问题之一。本文将深入探讨Android和iOS两大主流操作系统在隐私保护方面的策略和实现方式,分析它们各自的优势和不足,以及如何更好地保护用户的隐私。
|
2月前
|
消息中间件 存储 Java
Android消息处理机制(Handler+Looper+Message+MessageQueue)
Android消息处理机制(Handler+Looper+Message+MessageQueue)
45 2
|
2月前
|
ARouter Android开发
Android不同module布局文件重名被覆盖
Android不同module布局文件重名被覆盖
|
1月前
|
Linux Android开发 iOS开发
深入探索Android与iOS的多任务处理机制
在移动操作系统领域,Android和iOS各有千秋,尤其在多任务处理上展现出不同的设计理念和技术实现。本文将深入剖析两大平台在后台管理、资源分配及用户体验方面的策略差异,揭示它们如何平衡性能与电池寿命,为用户带来流畅而高效的操作体验。通过对比分析,我们不仅能够更好地理解各自系统的工作机制,还能为开发者优化应用提供参考。
|
1月前
|
算法 Linux 调度
深入探索安卓系统的多任务处理机制
【10月更文挑战第21天】 本文旨在为读者提供一个关于Android系统多任务处理机制的全面解析。我们将从Android操作系统的核心架构出发,探讨其如何管理多个应用程序的同时运行,包括进程调度、内存管理和电量优化等方面。通过深入分析,本文揭示了Android在处理多任务时所面临的挑战以及它如何通过创新的解决方案来提高用户体验和设备性能。
46 1
|
2月前
|
消息中间件 存储 Java
Android面试高频知识点(2) 详解Android消息处理机制(Handler)
Android面试高频知识点(2) 详解Android消息处理机制(Handler)
|
2月前
|
消息中间件 存储 Java
Android面试高频知识点(2) 详解Android消息处理机制(Handler)
Android面试高频知识点(2) 详解Android消息处理机制(Handler)
61 1
|
2月前
|
存储 安全 数据安全/隐私保护
探索安卓与iOS的隐私保护机制####
【10月更文挑战第15天】 本文深入剖析了安卓和iOS两大操作系统在隐私保护方面的策略与技术实现,旨在揭示两者如何通过不同的技术手段来保障用户数据的安全与隐私。文章将逐一探讨各自的隐私控制功能、加密措施以及用户权限管理,为读者提供一个全面而深入的理解。 ####
86 1
|
2月前
|
消息中间件 存储 Java
Android消息处理机制(Handler+Looper+Message+MessageQueue)
Android消息处理机制(Handler+Looper+Message+MessageQueue)
66 2
|
3月前
|
存储 缓存 Android开发
Android RecyclerView 缓存机制深度解析与面试题
本文首发于公众号“AntDream”,详细解析了 `RecyclerView` 的缓存机制,包括多级缓存的原理与流程,并提供了常见面试题及答案。通过本文,你将深入了解 `RecyclerView` 的高性能秘诀,提升列表和网格的开发技能。
81 8