何时使用getDefaultSharedPreferences和getSharedPreferences

时间:2012-02-21 20:56:03

标签: android

我只是好奇。有3种方法:

1. getPreferenceManager().setSharedPreferencesName(String PrefName);

2. PreferenceManager.getDefaultSharedPreferences(Context context)

3. Context.getSharedPreferences (String name, int mode)

据我所知,第三种方法仅在使用第一种方法时使用,对吧? 但是使用3方法我们也使用addPreferencesFromResource(int resID); 那么区别是什么呢?我们什么时候可以使用这些方法之一? 谢谢!

2 个答案:

答案 0 :(得分:24)

让我们一步一步:

  1. setSharedPreferencesName()是允许设置首选项组名称供以后使用的方法。这有助于例如使用helper类时 在通过调用addPreferencesFromResource()从XML资源文件加载首选项之前, PreferencesActivity 。因此,它不像您上面提到的其他两种方法那样常见。

  2. getDefaultSharedPreferences()使用默认名称,通常存储为/data/data/com.package.name/shared_prefs/com.package.name_preferences.xml。 它是常用的。请注意,此默认设置为每个应用程序

    替代方法 - getSharedPreferences()需要指明特定的首选项(文件)名称和操作模式。

  3. 同样出现在another answer about shared preferences中, getDefaultSharedPreferences()实际上使用了Context.getSharedPreferences,因此结果是相同的,但没有灵活性可以拆分为多个首选项文件,由getSharedPreferences()提供。使用分享应用之间的首选项 使用MODE_WORLD_READABLE也可以使用getSharedPreferences()操作指示符,但很少使用。

  4. 恕我直言, getDefaultSharedPreferences()可以安全使用,而不会混淆容易出现错别字和混淆的多个偏好文件名。

    如果有人知道使用 getSharedPreferences()而不是 getDefaultSharedPreferences()的充分理由,请在此处留言告诉我。

答案 1 :(得分:1)

getDefaultSharedPreferences()使用默认的首选项文件名,例如"com.example.something_preferences"。此默认值是针对每个应用程序设置的,因此同一应用程序上下文中的所有活动都可以轻松访问它,如以下示例所示:

SharedPreferences spref = PreferenceManager.getDefaultSharedPreferences(this);
if (spref.contains("email")) {
     String sEmailAddr = spref.getString("email", "");
}

首选项通常存储在/data/data/com.package.name/shared_prefs/com.package.name_preferences.xml

getSharedPreference是最好的方法,因为使用getDefaultSharedPreferences有一些缺陷

  1. Actualy getDefaultSharedPreferences对某些人的工作不正确 用targer构建时的设备api 13
  2. 从快捷方式和菜单中启动应用程序让我与众不同 DefaultSharedPreferences。删除DefaultSharedPreferences后 从我的代码 - 它的工作完美。我不能只说:人们不会 shrotcuts,所以我不得不改变代码
  3. link也可以提供帮助