我目前正在开发“开发Android应用程序”Udacity课程。在“第3课:新活动和意图>使用SharedPreferences”部分中,教师要求我在Android开发者网站上挖掘如何从SharedPreferences
获取用户首选项。但是,我发现官方文档和课程解决方案之间存在差异。
Udacity课程solution说,要获取SharedPreferences
的{{1}}个实例,您应该致电:
PreferenceActivity
(其中SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
只是getActivity()
,因为它在Context
内被调用。)
Android Developer Site上的the official documentation表示您应该致电:
Fragment
那么SharedPreferences prefs = getActivity().getPreferences(Context.MODE_PRIVATE)
和PreferenceManager.getDefaultSharedPreferences(Context context)
之间有什么区别?
请注意:此问题不涉及需要文件名的Activity.getPreferences(int mode)
。这是getSharedPreferences()
和getPreferences()
之间的区别。
提前致谢。
答案 0 :(得分:17)
根据您提供给Android文档的链接
getSharedPreferences() - 如果您需要使用第一个参数指定的名称标识的多个首选项文件,请使用此选项。
getPreferences() - 如果您的Activity只需要一个首选项文件,请使用此选项。因为这将是您的Activity的唯一首选项文件,所以您不提供名称。
因此,当您要保存/检索的数据可以在应用程序中的不同活动中使用时,请使用getSharedPreferences。如果这些首选项仅用于一个Activity,则可以使用getPreferences。
编辑:还要注意,如你在帖子中所说的'getDefaultSharedPreferences将使用默认名称“com.example.something_preferences”,但getSharedPreferences将需要一个名称'
答案 1 :(得分:12)
主要区别之一:getPreferences()返回仅与其打开的活动相关的文件。而getDefaultSharedPreferences()返回应用程序的全局首选项。昨天学到了很难的方法。
答案 2 :(得分:5)
如果您查看PreferenceManager:
public static SharedPreferences getDefaultSharedPreferences(Context context) {
return context.getSharedPreferences(getDefaultSharedPreferencesName(context),
getDefaultSharedPreferencesMode());
}
/**
* Returns the name used for storing default shared preferences.
*
* @see #getDefaultSharedPreferences(Context)
* @see Context#getSharedPreferencesPath(String)
*/
public static String getDefaultSharedPreferencesName(Context context) {
return context.getPackageName() + "_preferences";
}
private static int getDefaultSharedPreferencesMode() {
return Context.MODE_PRIVATE;
}
因此getDefaultSharedPreferences()使用getSharedPreferences()方法将您的应用包名称和模式设为私有,如果您使用活动中的getPreferences(),它将使用相同的getSharedPreferences()方法,但使用getLocalClassName();
答案 3 :(得分:1)
从下面链接的第一篇文章:“注意:SharedPreferences API仅用于读取和写入键值对,您不应将它们与Preference API混淆,这可以帮助您为应用程序构建用户界面设置(尽管他们使用SharedPreferences作为保存应用设置的实现)。“
http://developer.android.com/training/basics/data-storage/shared-preferences.html