getDefaultSharedPreferences()和getPreferences()之间有什么区别?

时间:2015-10-31 01:54:30

标签: android android-preferences android-sharedpreferences

我目前正在开发“开发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()之间的区别。

提前致谢。

4 个答案:

答案 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

http://developer.android.com/guide/topics/ui/settings.html