我正在使用我的混合Cordova应用程序中的SQLCipher实现对SQLite数据库的访问,该应用程序使用一个自定义插件(即由我编写)。 SQLCipher文档 - 以及在Android中使用SQLite的其他教程 - 一直引用Context.getFilesDir
。在我的插件代码中,我存储了其他应用程序文件并广泛使用getDatabasePath
。 getFilesDir
与Context.getFilesDir
的不同之处是什么?例如,它是否承诺数据库将更有可能持续存在而不会以某种方式被转储,因为操作系统决定通过删除存储在{{1}}中的某些文件来创建“更多空间”?
答案 0 :(得分:1)
两者都解析到同一目录。 getDatabasePath
致电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);
}
}
@Override
public File getFilesDir() {
synchronized (mSync) {
if (mFilesDir == null) {
mFilesDir = new File(getDataDir(), "files");
}
return ensurePrivateDirExists(mFilesDir);
}
}
请注意,返回的File
由ensurePrivateDirExists
解析,两种方法都有getDataDir
解析的相同输入目录。
返回文件系统上所有目录的绝对路径 属于此应用程序的私人文件将被存储。
因此,您的案例中存在无差异。
不要忘记返回的路径可以更改,因为doc说:
如果将调用应用移动到,则返回的路径可能会随时间而变化 采用的存储设备,因此只能保留相对路径。