【Android 文件管理】分区存储 ( 分区存储机制 和 文件索引数据 )
文章目錄
- 一、Android 10 以前的存儲機制
- 二、Android 10 及以后的分區存儲機制
- 三、Android 10 中的存儲過渡方案
- 四、文件索引數據庫
- 五、相關文檔資料
一、Android 10 以前的存儲機制
Android 101010 之前的文件系統 , 內存分為兩塊 , 應用私有目錄 , 和 共享存儲空間 ;
私有目錄 : 只能保存本應用的數據 , 其它應用無法讀寫該目錄中的數據 , 應用卸載時 , 該目錄自動刪除 ;
共享存儲空間 : 所有的應用都可以隨意訪問 , 隨意讀寫該區域內的數據 , 數據可以任意放置 , 刪除 , 修改 ; 應用卸載時寫出到該區域的數據不會被刪除 ;
任何目錄可以存儲任何類型文件 , 可以將圖片存儲到 Movies , 視頻存儲到 Music 目錄中 ;
共享存儲空間 絕對是個 天坑 , 能不用盡量不用 ;
二、Android 10 及以后的分區存儲機制
Android 101010 及以后的文件系統 :
私有目錄 : 與之前保持一致 , 只能保存本應用的數據 , 其它應用無法讀寫該目錄中的數據 , 應用卸載時 , 該目錄自動刪除 ;
共享存儲空間 : Google 官方對該存儲區域進行了統一規劃 , Android 111111 中 , 每個目錄存儲什么類型的文件 , 都有相應規范 , 文件不能亂放置 ;
文件存儲類型限制 : 文件一旦放錯位置 , 就會拋異常 ;
-
專門存儲 圖片文件 的目錄 Pictures , 只能存放圖片 , 不能存放其它類型文件 ,
-
專門存儲 視頻文件 的目錄 Movies , 只能存視頻文件 ;
-
專門存儲音頻文件的目錄 Music , 只能存儲音頻文件 ;
-
專門存儲文檔文件的目錄 Document , 只能存儲文檔相關文件 ;
-
Download 目錄可以放置任何類型的文件 ;
三、Android 10 中的存儲過渡方案
Android 101010 版本是過渡版本 , 在該版本中可以選擇啟用分區存儲 , 也可以選擇不用 , 在清單文件的 application 節點設置 requestLegacyExternalStorage=“true” 屬性可以設置 不啟用 分區存儲 方案 , 但是 在 Android 111111 中 必須 啟用分區存儲 , 否則應用不能兼容 Android 111111 系統 ;
Android 101010(API 級別 292929)及之前的系統版本 , 操作文件時 , 使用的 File 類 , 該類只支持傳統的存儲方式 , 不支持分區存儲 ;
Android 111111(API 級別 303030)中不能使用 File 進行文件操作 , 只能使用 MediaStore 進行文件操作 ;
參考文檔 - 暫時停用分區存儲 : https://developer.android.google.cn/training/data-storage/use-cases#opt-out-scoped-storage
四、文件索引數據庫
Android 111111(API 級別 303030) 之后的存儲機制 : Android 中所有文件存儲 , 都會將文件的索引存儲在數據庫中 , 在 /data/data/com.android.providers.media 目錄下的文件就是專門用于管理該數據庫的 ;
在 /data/data/com.android.providers.media 目錄下有 444 個目錄 , 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 #將 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
總結
以上是生活随笔為你收集整理的【Android 文件管理】分区存储 ( 分区存储机制 和 文件索引数据 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【错误记录】Android 应用打包错误
- 下一篇: 【Java 注解】自定义注解 ( 元注解