【问题标题】:Issue with the name of cache directory in AndroidAndroid中缓存目录名称的问题
【发布时间】:2017-02-24 09:49:09
【问题描述】:

在我的应用程序中,我将临时文件保存到我的应用程序缓存文件夹中。我通过这种方法获取缓存目录的名称:

context.getCacheDir();

它返回给我这样的路径:/data/user/0/my.app.packagename 但是后来当我试图通过这种方法获取我的缓存文件的父目录的名称时 - file.getParent(); 我得到了完全不同的缓存目录路径,在我的例子中:/data/data/my.app-packagename

所以我只是想知道为什么会这样,为什么getParent() 没有返回与context.getCacheDir() 相同的路径?

【问题讨论】:

  • 能否提供源代码(片段)?

标签: java android caching android-file


【解决方案1】:

行为是正确的,技术上是一样的。 如果您通过 adb shell 连接到您的 android 设备并进入 /data/user/ 并运行“ll”命令,您将看到文件夹 0 只是指向 /data/data/ 的符号链接。

root@android:/data/user # ll
lrwxrwxrwx root     root              1970-01-01 01:00 0 -> /data/data/

如果您不知道这意味着什么,请阅读symbolic links

所以没有问题,你可以相信 android 他们是一样的。

【讨论】:

  • 谢谢)在我的情况下,我试图检查我的文件是否在缓存中。我是通过比较两个字符串来完成的,例如 file.getParent().startsWith(context.getCacheDir())。而且我总是假的,因为路径中的 0 个字符)
【解决方案2】:

这种行为今天让我很困惑。 这是我的 50 美分来说明这一点:

  1. 我已经用 Android 8.1 启动了一个模拟器
  2. 我已通过 USB 连接了我的 Android 9 设备

之后我启动了 Android-Studio 并打开了设备文件资源管理器

现在奇怪的事情发生了:

  • 在 Android 8.1 上,您会看到结构 /data/user/0/com.myApp/
  • 在 Android 9 上没有目录 /data/user(也没有通过 android-studio 可见的符号链接)

但是,内部路径似乎是相同的(即使在 android studio 中没有可见的符号链接)。

我使用 RNFetchBlob(React 本机包来读取文件),如果我从 RNFetchBlob.fs.dirs.CacheDir 输出结果,即使在 Android 上,结果也是 /data/user/0/.... 9 此目录不存在。 但我尝试了一下,并使用以下命令输出将在此目录中找到的所有文件:

RNFetchBlob.fs.ls(RNFetchBlob.fs.dirs.CacheDir)
    .then((files) => {
      console.log("output-files",files);
    })

...发现这输出了我之前缓存的所有文件。

如果有人知道从 Android 9 开始存在这种行为的一些文档,请发表评论并指出我们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-31
    • 1970-01-01
    • 2017-08-17
    • 1970-01-01
    • 1970-01-01
    • 2015-04-18
    • 1970-01-01
    • 2020-09-28
    相关资源
    最近更新 更多