日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

Android 文件系统与Android11 分区存储

發(fā)布時(shí)間:2024/3/13 Android 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 文件系统与Android11 分区存储 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、Android文件系統(tǒng)

Android文件系統(tǒng)分為 內(nèi)部存儲(chǔ)(internal storage)外部存儲(chǔ)(external storage)

1.1 用一個(gè)表格來(lái)直觀對(duì)比一下兩者:

1.2 應(yīng)用的私有路徑

應(yīng)用在安裝之后,系統(tǒng)會(huì)自動(dòng)在內(nèi)部存儲(chǔ)和外部存儲(chǔ),分別建立應(yīng)用的私有存儲(chǔ)區(qū)域。

內(nèi)部存儲(chǔ) : data/user/0/packageName
外部存儲(chǔ) : storage/emulated/0/android/data/packageName

當(dāng)應(yīng)用卸載或者清除數(shù)據(jù)后,該區(qū)域文件會(huì)被刪除。

1.3 內(nèi)外部存儲(chǔ)圖解

二、 了解分區(qū)存儲(chǔ)

Android 10版本中,Google推出 分區(qū)存儲(chǔ)(scoped storage)的功能。

背景

分區(qū)存儲(chǔ)功能是針對(duì)內(nèi)置的外部存儲(chǔ)來(lái)說(shuō)的,很多應(yīng)用喜歡在外部存儲(chǔ)的根目錄創(chuàng)建自己的文件夾,比如:storage/emulated/0/***

這樣做的好處:1. 當(dāng)不斷向該目錄存儲(chǔ)時(shí),應(yīng)用自己的容量不會(huì)變化; 2. 當(dāng)應(yīng)用卸載時(shí),該目錄下文件不會(huì)被刪除,可用于保存一些可持久性的文件。

但是也有壞處: 1. 對(duì)用戶來(lái)說(shuō),會(huì)有很多垃圾文件存在于手機(jī)中;2. 只要獲取到Read 和 Write權(quán)限,就可以隨意訪問外部存儲(chǔ)的任何目錄,信息安全存在隱患。

分區(qū)存儲(chǔ)

  • 每個(gè)應(yīng)用向自己的私有目錄讀寫文件,不需要讀寫權(quán)限。私有文件目錄具體路徑: storage/emulated/0/android/data/packageName/ ,獲取方法: Context#getExternalFilesDir()
  • 應(yīng)用即使獲取了讀寫權(quán)限,也無(wú)法訪問其他應(yīng)用的私有目錄。
  • 當(dāng)應(yīng)用需要獲取媒體文件時(shí),通過 MediaStore API 向公共存儲(chǔ)目錄DCIM、Music或者M(jìn)ovie獲取。同樣寫媒體文件也是如此。并且讀寫自己的文件時(shí)不需要申請(qǐng)權(quán)限。 只有讀其他應(yīng)用的媒體文件時(shí)才會(huì)需要申請(qǐng)READ_EXTERNAL_STORAGE權(quán)限。
    (更新:Android11為目標(biāo)平臺(tái)時(shí),可以使用文件直接路徑去訪問媒體,這是在Android10上沒有的,應(yīng)用的性能會(huì)略有下降,還是推薦使用MediaStore )
  • 當(dāng)應(yīng)用需要獲取其他非媒體文件時(shí),比如doc、pdf文件,需要使用 系統(tǒng)的文件選擇器SAF 來(lái)進(jìn)行訪問。
  • 所以WRITE_EXTERNAL_STORAGE權(quán)限,在未來(lái)的Android11版本里,會(huì)被廢棄。 (寫文件不需要權(quán)限,只能在私有目錄和公共目錄寫文件)
  • 三、分區(qū)存儲(chǔ)適配

    舊版存儲(chǔ)位置遷移

    除了應(yīng)用的私有目錄和公共目錄,其他位置都稱為 舊版存儲(chǔ)位置,我們需要將舊版存儲(chǔ)位置的數(shù)據(jù)遷移到能兼容分區(qū)存儲(chǔ)的位置。

  • 如果以Android 11為目標(biāo)平臺(tái)的應(yīng)用,需要在manifest清單中標(biāo)記preserveLegacyExternalStorage 為true,這樣在Android11的機(jī)器上覆蓋安裝時(shí),才能訪問舊版存儲(chǔ)位置,卸載重裝會(huì)失效。
  • 如果以Android10為目標(biāo)平臺(tái),需要在manifest清單中標(biāo)記requestLegacyExternalStorage 為true,這樣在Android10機(jī)器上覆蓋安裝才能訪問舊版存儲(chǔ)位置,卸載重裝會(huì)失效。在Android11的機(jī)器上兩種安裝方式都會(huì)失效,需要加上preserveLegacyExternalStorage = true,且覆蓋安裝才能訪問舊版存儲(chǔ)位置。卸載重裝會(huì)失效。
  • 如果以Android 9及以下為目標(biāo)平臺(tái)時(shí),就能正常的進(jìn)行文件移動(dòng)。將應(yīng)用在外部存儲(chǔ)器根目錄的保存的數(shù)據(jù)中,如果能接受隨應(yīng)用的卸載而刪除的文件,遷移至**storage/emulated/0/android/data/packageName/**目錄下。需要和其他應(yīng)用共享的媒體文件,遷移至媒體存儲(chǔ)位置。
  • 正確使用讀寫API

  • 只在外部存儲(chǔ)的應(yīng)用私有目錄下,用直接路徑讀寫文件
  • 訪問或者共享媒體文件,使用MediaStore在公共目錄下讀寫文件
  • 訪問或者共享非媒體文件,使用系統(tǒng)的文件選擇器SAF在公共目錄Download下讀寫文件
  • 總結(jié)

    以上是生活随笔為你收集整理的Android 文件系统与Android11 分区存储的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。