PreferenceManager.getDefaultSharedPreferences()vs getPreferences()

时间:2013-08-13 08:55:25

标签: android sharedpreferences android-preferences

PreferenceManager.getDefaultSharedPreferences(context)

getPreferences()

似乎检索不同的偏好设置。

PreferenceManager.getDefaultSharedPreferences(context).getBoolean(
                        "userWasAskedToEnableGps", false);

对我来说返回false,

getPreferences(MODE_PRIVATE).getBoolean("userWasAskedToEnableGps", false);

返回true。

Preference是用像

这样的编辑器编写的
Editor e = getPreferences(MODE_PRIVATE).edit(); 
e.putBoolean (...);
e.commit();

如何从上下文中获取活动之外的相同首选项?

3 个答案:

答案 0 :(得分:13)

根据docs

getSharedPreferences() - 如果您需要使用第一个参数指定的名称标识的多个首选项文件,请使用此选项。

getPreferences() - 如果您的活动只需要一个偏好设置文件,请使用此选项。因为这将是您的活动的唯一首选项文件,所以您不提供名称。 范围仅限于创建活动的活动

因此,如果您希望首选项在其他活动或上下文中可用,则必须使用getSharedPreferences()getDefaultSharedPreferences()

ans解释了两者之间的区别。

答案 1 :(得分:9)

从android github repo(1),我们可以看到getPreferences除了使用当前类名调用getSharedPreferences方法之外什么都不做。

public SharedPreferences getPreferences( int mode ) {
    return getSharedPreferences( getLocalClassName(), mode );
}

没有任何限制其他活动/代码使用适当的类名访问共享首选项。更重要的是,我更喜欢来使用getPreferences,因为这意味着=>永远不会更改活动名称。如果你改变了,那么请注意访问共享偏好,并明确提到早期的类名(升级前)。

答案 2 :(得分:1)

使用具有相同常量名称的Context.getSharedPreferences,它会在您应用的任何位置为您提供相同的偏好设置。