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

fqf*_*555 12 android android-preferences android-sharedpreferences

我目前正在开发"开发Android应用程序"Udacity课程.在"第3课:新活动和意图>使用SharedPreferences"部分中,教师要求我在Android开发者网站上挖掘如何获取用户首选项SharedPreferences.但是,我发现官方文档和课程解决方案之间存在差异.

Udacity课程的解决方案说,为了抓住一个SharedPreferences实例PreferenceActivity,你应该打电话:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
Run Code Online (Sandbox Code Playgroud)

(这里getActivity()只是在Context这里,因为它在里面被称为Fragment.)

虽然Android开发者网站上的官方文档表明您应该致电:

SharedPreferences prefs = getActivity().getPreferences(Context.MODE_PRIVATE)
Run Code Online (Sandbox Code Playgroud)

那么PreferenceManager.getDefaultSharedPreferences(Context context)和之间的区别是Activity.getPreferences(int mode)什么?

请注意:此问题不涉及getSharedPreferences()需要文件名的任何内容.这是关于之间的差异getPreferences()getDefaultSharedPreferences().

提前致谢.

Shy*_*yri 18

根据您提供给Android文档的链接

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

getPreferences() - 如果您的Activity只需要一个首选项文件,请使用此选项.因为这将是您的Activity的唯一首选项文件,所以您不提供名称.

因此,当您要保存/检索的数据可以在应用程序中的不同活动中使用时,请使用getSharedPreferences.如果这些首选项仅用于一个Activity,则可以使用getPreferences.

编辑:还要注意,正如帖子中所说,你链接'getDefaultSharedPreferences将使用默认名称,如"com.example.something_preferences",但getSharedPreferences将需要一个名称'

  • 这个问题没有解决getharedprefereces ...它是关于getdefaultsharedpreference和getpreferences之间的差异...还要注意,如果使用getshared首选项或getpreferences存储首选项键/值,它将不能作为另一个活动的默认首选项. ..你知道的问题是关于你没有解决的事情之间的差异... (3认同)

me_*_*me_ 13

其中一个主要区别是:getPreferences()返回一个仅与其打开的活动相关的文件.而getDefaultSharedPreferences()返回应用程序的全局首选项.昨天学到了很难的方法.

  • 如果我理解正确的话,在两个不同的 Activity 中调用 `getPreferences()` 会产生两个不同的文件,对吧? (4认同)

Onr*_*egs 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;
}
Run Code Online (Sandbox Code Playgroud)

因此,getDefaultSharedPreferences()将getSharedPreferences()方法与您的应用包名称和模式私有一起使用,如果您从活动中使用getPreferences(),它将使用相同的getSharedPreferences()方法,但具有getLocalClassName();


Wil*_*ale 1

来自下面链接的第一篇文章:“注意:SharedPreferences API 仅用于读取和写入键值对,您不应将它们与 Preference API 混淆,Preference API 可以帮助您为应用程序设置构建用户界面(尽管它们使用 SharedPreferences)作为他们保存应用程序设置的实现)。

http://developer.android.com/training/basics/data-storage/shared-preferences.html

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