任何人都可以解释或提供解释getFilesDir()如何工作的链接。我知道它返回特定包名称的内部存储路径。但我想知道它是如何返回路径的?是在安装应用程序时直接创建文件夹还是在首次调用该方法时创建该文件夹?和其他类似的问题。
答案 0 :(得分:1)
Here is the stock implementation of Context
,称为ContextImpl
。
从Android 6.0开始,getFilesDir()
的实施是:
@Override
public File getFilesDir() {
synchronized (mSync) {
if (mFilesDir == null) {
mFilesDir = new File(getDataDirFile(), "files");
}
return createFilesDirLocked(mFilesDir);
}
}
如果需要, createFilesDirLocked()
会经历一些复杂的旋转来创建目录:
// Common-path handling of app data dir creation
private static File createFilesDirLocked(File file) {
if (!file.exists()) {
if (!file.mkdirs()) {
if (file.exists()) {
// spurious failure; probably racing with another process for this app
return file;
}
Log.w(TAG, "Unable to create files subdir " + file.getPath());
return null;
}
FileUtils.setPermissions(
file.getPath(),
FileUtils.S_IRWXU|FileUtils.S_IRWXG|FileUtils.S_IXOTH,
-1, -1);
}
return file;
}
文件夹是在安装应用程序时直接创建的,还是在首次调用方法时创建的?
AFAIK,它是在调用方法时创建的。您可以自己测试:编写应用程序,然后将其安装在模拟器上,但不要运行它。使用Android设备监视器或adb shell
查看目录是否存在。
和其他类似的问题
欢迎您随意浏览Android框架类的Java代码。