背景
首先來說一下寫這篇文章的目的。大家都知道,目前Android系統已經更新到AndroidQ(10)
,AndroidQ(10)
中改動大的有三個地方:
- 存儲空間的限制;
- 定位權限(前臺定位、后臺定位);
- 設備唯一標識。
而本篇文章對于存儲空間限制
的改動提供基礎,想要做適配就必須了解Android中的內部存儲和外部存儲
。
內部存儲路徑
data/data/應用包名/對應路徑
- 第一個data:表示系統根目錄下的一個文件夾
- 第二個data:專門提供不同app存儲內部數據的
需要注意的是:當前路徑在真機上無法查看,如果有需要查看,例如操作數據庫等,可以通過AndroidStudio中的FileExplorer
查看
FileExplorer查看
對于手機上安裝的每個app來說,系統都會在data/data
目錄下創建以應用包名為名字的文件夾。
在對應目錄下可查看以下文件夾:
- cache:緩存目錄,系統默認創建的
- files:可以手動操作創建,除此之外所有文件夾都不能手動創建
- database:數據庫目錄
- shared_prefs: sp文件存儲的目錄
- app_webview: webview緩存目錄
接下來,就對每個目錄依次介紹一下
cache目錄
image
系統默認創建的,讓我們用來存儲app的緩存數據
database目錄
image
系統自動創建的,可以用戶需要的數據庫文件,以.db
結尾。
shared_prefs目錄
image
我們在項目中經常會使用sp,如下面代碼:
SharedPreferences test_sp = getSharedPreferences("my_sp", MODE_PRIVATE);
SharedPreferences.Editor edit = test_sp.edit();
edit.putString("myName", "myName");
edit.commit();
一旦提交后,就會生成“my_sp.xml”
文件,這個文件中都是我們需要存放的sp內容。
app_webview目錄
image
很容易的看出,這個存放webview緩存的。如果項目中有用到的webview,就會生成對應的緩存目錄文件夾。
以上cache
、database
、shared_prefs
、app_webview
四個目錄都為系統自動創建,而files
目錄則是我們可以創建的。
files目錄
image
此目錄是我們可以手動生成的,當調用以下代碼時會生成:
//這個是Context對象的方法
//返回一個File對象,這個對象的路徑是data/data/包名/files/
File filesDir = getFilesDir();
String absolutePath = filesDir.getAbsolutePath();
我們還可以在此目錄下創建文件,下載文件等。
區分 File cacheDir = getCacheDir();
與File filesDir = getFilesDir();
當手機內存存儲空間比較低時,cache目錄下的所有文件可能都會被刪除。
在手機系統管理器中,我們經常看到清除緩存和清除數據這兩個功能。
- 清除緩存:清除的是cache目錄下的數據
- 清除數據:清除的是整個應用的內部存儲數據
內部存儲目錄下的文件夾會隨著app的卸載而被系統自動刪除。
下一篇文章:Android中的外部存儲