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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android 应用目录分析

發布時間:2024/9/30 Android 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 应用目录分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載請標明出處:http://blog.csdn.net/zhaoyanjun6/article/details/119650111
本文出自【趙彥軍的博客】

文章目錄

  • 沙箱私有目錄
  • 外部存儲空間中的應用私有目錄
  • 外部存儲公有目錄
  • 清除緩存 、清除數據有什么區別?

沙箱私有目錄

  • 內部存儲空間中的應用私有目錄
val filesDir = filesDir /data/user/0/com.example.myapplication/filesval cacheDir = cacheDir /data/user/0/com.example.myapplication/cache

是 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/databases

Context 提供了一個簡便方式,來獲取一個內部私有目錄

//獲取一個私有目錄,如果沒有,系統自動創建 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 私有目錄文件夾及其內容。
//判斷SD卡是否可用: val state = EnvironmentCompat.getStorageState(file) if (state == Environment.MEDIA_MOUNTED) {//sd卡可用 }

外部存儲公有目錄

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
與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的Android 应用目录分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。