亞寵展、全球寵物產業風向標——亞洲寵物展覽會深度解析
923
2022-05-29
文章目錄
一、Android 10 以前的存儲機制
二、Android 10 及以后的分區存儲機制
三、Android 10 中的存儲過渡方案
四、文件索引數據庫
五、相關文檔資料
一、Android 10 以前的存儲機制
Android 10 10 10 之前的文件系統 , 內存分為兩塊 ,
應用私有目錄
, 和
共享存儲空間
;
私有目錄 : 只能保存本應用的數據 ,
其它應用無法讀寫該目錄中的數據 ,
應用卸載時 , 該目錄自動刪除 ;
共享存儲空間 :
所有的應用都可以隨意訪問 , 隨意讀寫該區域內的數據
, 數據可以任意放置 , 刪除 , 修改 ;
應用卸載時寫出到該區域的數據不會被刪除 ;
任何目錄可以存儲任何類型文件 , 可以將圖片存儲到 Movies , 視頻存儲到 Music 目錄中 ;
共享存儲空間 絕對是個 天坑 , 能不用盡量不用 ;
二、Android 10 及以后的分區存儲機制
Android 10 10 10 及以后的文件系統 :
私有目錄 : 與之前保持一致 , 只能保存本應用的數據 ,
其它應用無法讀寫該目錄中的數據 ,
應用卸載時 , 該目錄自動刪除 ;
共享存儲空間 : Google 官方對該存儲區域進行了統一規劃 , Android 11 11 11 中 , 每個目錄存儲什么類型的文件 , 都有相應規范 , 文件不能亂放置 ;
文件存儲類型限制 : 文件一旦放錯位置 , 就會拋異常 ;
專門存儲 圖片文件 的目錄
Pictures
, 只能存放圖片 , 不能存放其它類型文件 ,
專門存儲 視頻文件 的目錄
Movies
, 只能存視頻文件 ;
專門存儲音頻文件的目錄
Music
, 只能存儲音頻文件 ;
專門存儲文檔文件的目錄
Document
, 只能存儲文檔相關文件 ;
Download 目錄可以放置任何類型的文件 ;
三、Android 10 中的存儲過渡方案
Android 10 10 10 版本是過渡版本 , 在該版本中可以選擇啟用分區存儲 , 也可以選擇不用 , 在清單文件的 application 節點設置
requestLegacyExternalStorage=“
true
”
屬性可以設置 不啟用 分區存儲 方案 , 但是
在 Android 11 11 11 中 必須 啟用分區存儲
, 否則應用不能兼容 Android 11 11 11 系統 ;
Android 10 10 10(API 級別 29 29 29)及之前的系統版本 , 操作文件時 , 使用的 File 類 , 該類只支持傳統的存儲方式 ,
不支持分區存儲 ;
Android 11 11 11(API 級別 30 30 30)中不能使用 File 進行文件操作 , 只能使用 MediaStore 進行文件操作 ;
參考文檔 - 暫時停用分區存儲 : https://developer.android.google.cn/training/data-storage/use-cases#opt-out-scoped-storage
四、文件索引數據庫
Android 11 11 11(API 級別 30 30 30) 之后的存儲機制 : Android 中所有文件存儲 , 都會將文件的索引存儲在數據庫中 , 在
/data/data/com.android.providers.media
目錄下的文件就是專門用于管理該數據庫的 ;
在
/data/data/com.android.providers.media
目錄下有 4 4 4 個目錄 , 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 #
1
2
3
4
5
6
7
將 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
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。