Android 应用目录分析
生活随笔
收集整理的這篇文章主要介紹了
Android 应用目录分析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉載請標明出處:http://blog.csdn.net/zhaoyanjun6/article/details/119650111
本文出自【趙彥軍的博客】
文章目錄
- 沙箱私有目錄
- 外部存儲空間中的應用私有目錄
- 外部存儲公有目錄
- 清除緩存 、清除數據有什么區別?
沙箱私有目錄
- 內部存儲空間中的應用私有目錄
是 app 的私有目錄,也稱沙箱。App 卸載后,此目錄隨之刪除。文件管理器無法訪問,除非root。還有一種方法,把手機連到到電腦上,運行 app debug 模式,用 AndroidStudio 工具是可以看到的。
cacheDir:機身內存不足時,文件會被刪除
需要注意的是,app 的 SharedPreferences 和 SQLiteDatabase 持久化應用相關數據也在這個目錄的父目錄。
SharedPreferences: /data/user/0/app_package_name/shared_prefs SQLiteDatabase: /data/user/0/app_package_name/databasesContext 提供了一個簡便方式,來獲取一個內部私有目錄
//獲取一個私有目錄,如果沒有,系統自動創建 val dir = getDir("myFile", Context.MODE_PRIVATE) /data/user/0/app_package_name/myFile- mode 是指文件夾的訪問權限而并不包括其子文件夾和文件的訪問權限:
- MODE_PRIVATE :該文件只能被當前程序讀寫;
- MODE_APPEND : 以追加方式打開該文件,應用程序可以向該文件中追加內容。
- MODE_WORLD_READABLE :該文件的內容可以 被其他程序讀取。
- MODE_WORLD_WRITEABLE :該文件的內容可以 被其他程序讀取、寫入。
外部存儲空間中的應用私有目錄
val externalCacheDir = externalCacheDir?.absolutePath /storage/emulated/0/Android/data/app_package_name/cacheval filesDir = getExternalFilesDir(null) //null 代表根目錄 /storage/emulated/0/Android/data/app_package_name/files這個目錄,是沙箱目錄,App 卸載后,此目錄隨之刪除 ,這個目錄可以通過文件管理器訪問。有一點是特別需要注意的,這個目錄存儲在 SD 卡上,如果用戶把 SD 卡卸載了,那么這個目錄將不可用。
內部私有目錄、外部私有目錄 均不需要申請權限。
值得注意的是,與內部存儲空間的應用私有目錄不同的是:
- 第一,默認情況下,系統并不會自動創建外部存儲空間的應用私有目錄。只有在應用需要的時候,開發人員通過 SDK 提供的 API 創建該目錄文件夾和操作文件夾內容。
- 第二,自 Android 7.0 開始,系統對應用私有目錄的訪問權限進一步限制。其他 App 無法通過 file:// 這種形式的 Uri 直接讀寫該目錄下的文件內容,而是通過 FileProvider 訪問。
- 第三,宿主 App 可以直接讀寫內部存儲空間中的應用私有目錄;而在 4.4 版本開始,宿主 App 才可以直接讀寫外部存儲空間中的應用私有目錄,使開發人員無需在 Manifest 文件中或者動態申請外部存儲空間的文件讀寫權限。
- 而相同點在于:同屬于應用私有目錄,當用戶卸載 App 時,系統也會自動刪除外部存儲空間下的對應 App 私有目錄文件夾及其內容。
外部存儲公有目錄
val dataDir = Environment.getDataDirectory().absolutePath /dataval storageDir = Environment.getStorageDirectory().absolutePath /storage需要注意的是:這兩個目錄需要權限聲明 , 在 6.0 及以上還需要動態申請權限
如果沒有權限,app 會崩潰
//動態申請權限: ActivityCompat.requestPermissions(this,arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE),200 )清除緩存 、清除數據有什么區別?
app里面有清除緩存,清除數據,但是這兩個有什么區別呢?
- 清除數據 = 清除內部存儲空間 cache + 清除內部存儲空間 files + 清除外部存儲空間 cache + 清除外部存儲空間 files
- 清除緩存 = 清除內部存儲空間 cache + 清除外部存儲空間 cache
總結
以上是生活随笔為你收集整理的Android 应用目录分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JAVA多线程中wait()方法的详细分
- 下一篇: Android ViewModel详解