getFilesDir()vs getDatabasePath()

时间:2018-02-12 10:36:11

标签: android sqlite android-context

我正在使用我的混合Cordova应用程序中的SQLCipher实现对SQLite数据库的访问,该应用程序使用一个自定义插件(即由我编写)。 SQLCipher文档 - 以及在Android中使用SQLite的其他教程 - 一直引用Context.getFilesDir。在我的插件代码中,我存储了其他应用程序文件并广泛使用getDatabasePathgetFilesDirContext.getFilesDir的不同之处是什么?例如,它是否承诺数据库将更有可能持续存在而不会以某种方式被转储,因为操作系统决定通过删除存储在{{1}}中的某些文件来创建“更多空间”?

1 个答案:

答案 0 :(得分:1)

两者都解析到同一目录。 getDatabasePath致电getDatabasesDir

getDatabasesDir

  private File getDatabasesDir() {
        synchronized (mSync) {
            if (mDatabasesDir == null) {
                if ("android".equals(getPackageName())) {
                    mDatabasesDir = new File("/data/system");
                } else {
                    mDatabasesDir = new File(getDataDir(), "databases");
                }
            }
            return ensurePrivateDirExists(mDatabasesDir);
        }
    }

getFilesDir

  @Override
    public File getFilesDir() {
        synchronized (mSync) {
            if (mFilesDir == null) {
                mFilesDir = new File(getDataDir(), "files");
            }
            return ensurePrivateDirExists(mFilesDir);
        }
    }

请注意,返回的FileensurePrivateDirExists解析,两种方法都有getDataDir解析的相同输入目录。

getDataDir

  

返回文件系统上所有目录的绝对路径   属于此应用程序的私人文件将被存储。

因此,您的案例中存在无差异

不要忘记返回的路径可以更改,因为doc说:

  

如果将调用应用移动到,则返回的路径可能会随时间而变化   采用的存储设备,因此只能保留相对路径。