繁体   English   中英

PreferenceManager.getDefaultSharedPreferences()vs getPreferences()

[英]PreferenceManager.getDefaultSharedPreferences() vs getPreferences()

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();

如何在Context中的Activity之外获得相同的Preferences?

根据文件

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

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

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

这个ans解释了你们两者之间的区别。

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

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

没有什么限制其他活动/代码使用适当的类名访问共享首选项。 更重要的是,我不想使用getPreferences ,因为这意味着=>永远不会更改活动名称。 如果更改,则使用明确提及的早期类名称(升级前)来处理访问共享首选项。

使用具有相同常量名称的Context.getSharedPreferences ,它将在您的应用程序的任何位置为您提供相同的首选项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM