默认共享首选项写入何处?

Where are default shared preferences written to?

我试图在第一次 运行 我的应用程序时初始化默认共享首选项。我发现根据我的操作方式,Android 文件系统上的共享首选项文件存在差异。

如果我使用以下代码专门写入共享首选项,XML 文件位于 /data/data/myapp/shared_prefs/:

SharedPreferences.Editor editor = pref.edit();
if ((myKey = pref.getString("key", null)) == null) {
  myKey = "default value";
  editor.putString("key", myKey );
  editor.commit();
}

但是,如果我使用下面的一行来初始化默认值,我在 /data/data/myapp/shared_prefs/:

中看不到 XML 文件
myKey = pref.getString("key", "default value");

在后一种情况下,XML 文件存储在哪里,为什么会有不同的行为?

我先解决你的第二个案例:

myKey = pref.getString("key", "default value");

你在这里说的是"get the value associated with "key", or "default value" if nothing is"。这纯粹是一个read操作。当您通过此方法获得 "default value" returned 时,系统实际上并不是 "initializing" 您的共享首选项存储,它只是说 "didn't find anything for "key", so here's that other thing you said".

接下来,您的第一个案例:

SharedPreferences.Editor editor = pref.edit();
if ((myKey = pref.getString("key", null)) == null) {
    myKey = "default value";
    editor.putString("key", myKey );
    editor.commit();
}

在这里你对 getString() 做同样的事情,但是这次你检查它的 return 值然后执行 write 操作. if 块的主体是创建文件的内容。