【Android 文件管理】分区存储 ( 分区存储机制 和 文件索引数据 )
文章目錄
- 一、Android 10 以前的存儲機(jī)制
- 二、Android 10 及以后的分區(qū)存儲機(jī)制
- 三、Android 10 中的存儲過渡方案
- 四、文件索引數(shù)據(jù)庫
- 五、相關(guān)文檔資料
一、Android 10 以前的存儲機(jī)制
Android 101010 之前的文件系統(tǒng) , 內(nèi)存分為兩塊 , 應(yīng)用私有目錄 , 和 共享存儲空間 ;
私有目錄 : 只能保存本應(yīng)用的數(shù)據(jù) , 其它應(yīng)用無法讀寫該目錄中的數(shù)據(jù) , 應(yīng)用卸載時 , 該目錄自動刪除 ;
共享存儲空間 : 所有的應(yīng)用都可以隨意訪問 , 隨意讀寫該區(qū)域內(nèi)的數(shù)據(jù) , 數(shù)據(jù)可以任意放置 , 刪除 , 修改 ; 應(yīng)用卸載時寫出到該區(qū)域的數(shù)據(jù)不會被刪除 ;
任何目錄可以存儲任何類型文件 , 可以將圖片存儲到 Movies , 視頻存儲到 Music 目錄中 ;
共享存儲空間 絕對是個 天坑 , 能不用盡量不用 ;
二、Android 10 及以后的分區(qū)存儲機(jī)制
Android 101010 及以后的文件系統(tǒng) :
私有目錄 : 與之前保持一致 , 只能保存本應(yīng)用的數(shù)據(jù) , 其它應(yīng)用無法讀寫該目錄中的數(shù)據(jù) , 應(yīng)用卸載時 , 該目錄自動刪除 ;
共享存儲空間 : Google 官方對該存儲區(qū)域進(jìn)行了統(tǒng)一規(guī)劃 , Android 111111 中 , 每個目錄存儲什么類型的文件 , 都有相應(yīng)規(guī)范 , 文件不能亂放置 ;
文件存儲類型限制 : 文件一旦放錯位置 , 就會拋異常 ;
-
專門存儲 圖片文件 的目錄 Pictures , 只能存放圖片 , 不能存放其它類型文件 ,
-
專門存儲 視頻文件 的目錄 Movies , 只能存視頻文件 ;
-
專門存儲音頻文件的目錄 Music , 只能存儲音頻文件 ;
-
專門存儲文檔文件的目錄 Document , 只能存儲文檔相關(guān)文件 ;
-
Download 目錄可以放置任何類型的文件 ;
三、Android 10 中的存儲過渡方案
Android 101010 版本是過渡版本 , 在該版本中可以選擇啟用分區(qū)存儲 , 也可以選擇不用 , 在清單文件的 application 節(jié)點(diǎn)設(shè)置 requestLegacyExternalStorage=“true” 屬性可以設(shè)置 不啟用 分區(qū)存儲 方案 , 但是 在 Android 111111 中 必須 啟用分區(qū)存儲 , 否則應(yīng)用不能兼容 Android 111111 系統(tǒng) ;
Android 101010(API 級別 292929)及之前的系統(tǒng)版本 , 操作文件時 , 使用的 File 類 , 該類只支持傳統(tǒng)的存儲方式 , 不支持分區(qū)存儲 ;
Android 111111(API 級別 303030)中不能使用 File 進(jìn)行文件操作 , 只能使用 MediaStore 進(jìn)行文件操作 ;
參考文檔 - 暫時停用分區(qū)存儲 : https://developer.android.google.cn/training/data-storage/use-cases#opt-out-scoped-storage
四、文件索引數(shù)據(jù)庫
Android 111111(API 級別 303030) 之后的存儲機(jī)制 : Android 中所有文件存儲 , 都會將文件的索引存儲在數(shù)據(jù)庫中 , 在 /data/data/com.android.providers.media 目錄下的文件就是專門用于管理該數(shù)據(jù)庫的 ;
在 /data/data/com.android.providers.media 目錄下有 444 個目錄 , cache , code_cache , databases , shared_prefs , 其中 databases 就是存儲的上述文件索引數(shù)據(jù)庫 , 有兩個數(shù)據(jù)庫文件 : 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 數(shù)據(jù)庫拷貝出來 , 使用 SQLite 查看工具查看該數(shù)據(jù)庫 , 該數(shù)據(jù)庫中有一張 files 數(shù)據(jù)表 , 就是存放文件索引的 , 只有開啟分區(qū)存儲時 , 才將所有的文件都保存在該數(shù)據(jù)庫表中 ;
生成文件索引 :
-
在老版本的文件系統(tǒng)中 , 只有將文件放在 Pictures , Movies , Music , Document 等目錄下時 , 才生文件索引放在數(shù)據(jù)庫中 , 在 SD 卡其它位置創(chuàng)建文件 , 不會生成文件索引 ;
-
在新版本的分區(qū)存儲中 , 上述數(shù)據(jù)表中管理所有 SD 卡上的文件 , 所有的文件和目錄都會顯示在上述數(shù)據(jù)庫中 ;
external.db 數(shù)據(jù)庫 files 數(shù)據(jù)表字段簡介 :
-
_id : 每個文件都會被賦予一個 id , 不會重復(fù) ;
-
tittle : 文件名稱 , 一般是文件的完整名稱去掉文件后綴 ;
-
_display_name : 文件的完整名稱 , 帶后綴 ;
-
mime_type : 文件的 MIME 類型 ;
五、相關(guān)文檔資料
Android 文件處理參考文檔 :
-
數(shù)據(jù)和文件存儲概覽 : https://developer.android.google.cn/training/data-storage
-
訪問應(yīng)用專屬文件 : https://developer.android.google.cn/training/data-storage/app-specific#kotlin
-
保存到共享的存儲空間 : https://developer.android.google.cn/training/data-storage/shared
-
管理存儲設(shè)備上的所有文件 : https://developer.android.google.cn/training/data-storage/manage-all-files
-
分享文件 : https://developer.android.google.cn/training/secure-file-sharing
-
應(yīng)用安裝位置 : 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
總結(jié)
以上是生活随笔為你收集整理的【Android 文件管理】分区存储 ( 分区存储机制 和 文件索引数据 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【错误记录】Android 应用打包错误
- 下一篇: 【Java 注解】自定义注解 ( 元注解