gpt4 book ai didi

java - getExternalCacheDir() 清除数据后返回 null

转载 作者:IT老高 更新时间:2023-10-28 21:02:02 26 4
gpt4 key购买 nike

我有一个简单的应用程序,可以访问外部存储并将数据写入外部存储。一切正常,直到我转到“设置”->“应用程序”->“应用程序信息”并通过“清除数据”按钮清除数据,然后每次调用 getExternalCacheDir() 开始返回 null。

我一直在运行 Android 4.2.2 的 Nexus 7 上进行开发。

我的 list 看起来像:

<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
...

不起作用的代码段:

    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));

应用安装执行后的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

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

在清除数据并执行应用程序后,getExternalCacheDir() 方法返回 null,即使 Environment.getExternalStorageState() 返回“mounted”。有谁知道可能出了什么问题?

编辑

在 Gjordis 的帮助下,我发现 Clear data 按钮会删除整个应用程序的临时目录:

storage/sdcard0/Android/data/com.example.app/cache in Android/data

我无法通过 getExternalCacheDir() 或手动再次创建它(尽管我能够在 storage/sdcard0/Android/data/ 下创建其他目录)。

(Android/data/com.example.app在设备重启后再次创建,但这不是我要寻找的解决方案)

最佳答案

我已经遇到并解决了这个确切的问题。

单击清除数据按钮会导致 Android 停止您的应用运行并删除整个应用程序特定文件夹 "mnt/sdcard/Android/data/your.package.name" .

但是,我有一个从 Runtime.getRuntime().exec() 启动的单独进程,该进程仍在运行并且正在写入此文件夹。这导致文件夹卡在锁定状态,并导致您在我的应用调用 getExternalCacheDir() 时描述的相同症状。从/mnt/sdcard/Android/data 文件夹中运行 adb shell 然后 ls 表明该文件夹已被进程锁定。运行 ps 表明我的其他进程仍在运行。

解决方案是在调用 getExternalCacheDir() 之前正确终止仍在写入我的应用程序特定应用程序文件夹的其他进程。

关于java - getExternalCacheDir() 清除数据后返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16562165/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com