我正在通过混合的Android Cordova应用程序中的SQLCipher实现对SQLite数据库的访问,该应用程序使用一个自定义插件(即由我编写)。 SQLCipher文档以及有关在Android中使用SQLite的其他教程-始终引用Context.getDatabasePath
。在我的插件代码中,我存储了其他应用程序文件并大量使用Context.getFilesDir
。 getDatabasePath
与getFilesDir
有何不同。例如,是否因为操作系统决定通过删除存储在Context.getFilesDir
中的某些文件来创建“更多空间”而保证数据库将持久存在并且不会以某种方式转储的机会更大?
最佳答案
两者都解析到同一目录。 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);
}
}
注意,返回的
File
在两种方法中均由ensurePrivateDirExists
解析,该输入具有由getDataDir
解析的相同输入目录。getDataDir
返回文件系统上所有目录的绝对路径
属于此应用的私人文件被存储。
因此,您的情况没有区别。
不要忘记返回的路径可以更改,如doc所示:
如果将调用的应用程序移至,返回的路径可能会随时间变化
已采用的存储设备,因此仅应保留相对路径。