And*_*ndy 19 java android caching android-external-storage
我有一个简单的应用程序,可以访问和写入外部存储的数据.一切正常,直到我进入设置 - >应用程序 - >应用程序信息并通过"清除数据"按钮清除数据,然后每次调用getExternalCacheDir()开始返回null.
我一直在开发运行Android 4.2.2的Nexus 7.
我的清单看起来像:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.package"
android:versionCode="5"
android:versionName="1.3"
xmlns:tools="http://schemas.android.com/tools">
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<application
...
Run Code Online (Sandbox Code Playgroud)
不起作用的代码段:
Log.d(TAG, "getExternalStorageState() = " + Environment.getExternalStorageState());
Log.d(TAG, "getExternalCacheDir() = " + c.getExternalCacheDir());
Log.d(TAG, "getExternalFilesDir(null) = " + c.getExternalFilesDir(null));
Log.d(TAG, "getExternalFilesDir(Environment.DIRECTORY_MOVIES) = " + c.getExternalFilesDir(Environment.DIRECTORY_MOVIES));
Run Code Online (Sandbox Code Playgroud)
安装并执行应用程序后的LogCat:
05-15 11:26:45.948: DEBUG/HelperUtils(5541): getExternalStorageState() = mounted
05-15 11:26:45.948: DEBUG/HelperUtils(5541): getExternalCacheDir() = /storage/emulated/0/Android/data/com.example.package/cache
05-15 11:26:45.948: DEBUG/HelperUtils(5541): getExternalFilesDir(null) = /storage/emulated/0/Android/data/com.example.package/files
05-15 11:26:45.948: DEBUG/HelperUtils(5541): getExternalFilesDir(Environment.DIRECTORY_MOVIES) = /storage/emulated/0/Android/data/com.example.package/files/Movies
Run Code Online (Sandbox Code Playgroud)
清除App Info设置中的数据后的LogCat:
05-15 11:27:57.848: DEBUG/HelperUtils(5859): getExternalStorageState() = mounted
05-15 11:27:57.848: WARN/ContextImpl(5859): Unable to create external cache directory
05-15 11:27:57.848: DEBUG/HelperUtils(5859): getExternalCacheDir() = null
05-15 11:27:57.848: WARN/ContextImpl(5859): Unable to create external files directory
05-15 11:27:57.848: DEBUG/HelperUtils(5859): getExternalFilesDir(null) = null
05-15 11:27:57.848: WARN/ContextImpl(5859): Unable to create external files directory
05-15 11:27:57.848: DEBUG/HelperUtils(5859): getExternalFilesDir(Environment.DIRECTORY_MOVIES) = null
05-15 11:27:57.848: WARN/ContextImpl(5859): Unable to create external cache directory
Run Code Online (Sandbox Code Playgroud)
清除数据并执行app getExternalCacheDir()方法后,即使Environment.getExternalStorageState()返回"已挂载",也会返回null .有谁知道什么可能是错的?
编辑
在Gjordis的帮助下,我发现Clear data按钮删除了整个应用程序的临时目录:
storage/sdcard0/Android/data/com.example.app/cache 在 Android/data
我无法通过getExternalCacheDir()或手动创建它(虽然我能够在其下创建其他目录storage/sdcard0/Android/data/).
(Android/data/com.example.app在设备重启后再次创建,但这不是我要寻找的解决方案)
小智 11
我遇到并解决了这个确切的问题.
单击" 清除数据"按钮会导致Android停止运行应用程序,并删除整个应用程序特定的文件夹"mnt/sdcard/Android/data/your.package.name".
但是,我有一个单独的进程,它从Runtime.getRuntime().exec()仍然运行开始,它正在写入此文件夹.这导致文件夹卡在锁定状态,并导致我的应用程序调用时描述的相同症状getExternalCacheDir().运行adb shell然后ls从/ mnt/sdcard/Android/data文件夹中显示该文件夹已被进程锁定.运行ps表明我的其他进程仍在运行.
解决方案是在调用之前正确地杀死仍在写入应用程序的特定于应用程序的文件夹的其他进程getExternalCacheDir().
getExternalCacheDir()像名字那样返回缓存目录.如果没有缓存,则也没有目录.此目录用于使用remove data命令删除的临时文件.如果手机空间不足,它也可以自行删除这些文件夹.至少一些维护应用程序这样做.
getExternalFilesDir() 返回空间目录以保存数据.
| 归档时间: |
|
| 查看次数: |
12680 次 |
| 最近记录: |