当使用getDefaultSharedPreferences和getSharedPreferences

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

1. getPreferenceManager().setSharedPreferencesName(String PrefName); 2. PreferenceManager.getDefaultSharedPreferences(Context context) 3. Context.getSharedPreferences (String name, int mode) 

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

Solutions Collecting From Web of "当使用getDefaultSharedPreferences和getSharedPreferences"

让我们一步一步来:

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

  2. getDefaultSharedPreferences()使用默认名称,通常以/data/data/com.package.name/shared_prefs/com.package.name_preferences.xml存储。 这是常用的。 请注意,该默认值是根据应用程序设置的

    另一种方法 – getSharedPreferences()需要指定一个特定的首选项(文件)名称和操作模式。

  3. 同样在关于共享首选项的另一个答案中 , getDefaultSharedPreferences()实际上使用了Context.getSharedPreferences,所以结果是一样的,但没有可分割为多个首选项文件的灵活性,由getSharedPreferences() 。 使用MODE_WORLD_READABLE操作指示器共享应用程序之间的偏好也可以使用getSharedPreferences() ,但很less使用。

恕我直言, getDefaultSharedPreferences()可以安全地使用,而不会陷入混乱的多个偏好文件名称,容易出现拼写错误和混淆。

如果有人知道使用getSharedPreferences()而不是getDefaultSharedPreferences()的好理由,请通过评论在这里告诉我。

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. 实际上,使用targer API进行构build时, getDefaultSharedPreferences在某些设备上无法正确工作13
  2. 从快捷方式和菜单启动应用程序给了我不同的DefaultSharedPreferences 。 从我的代码中删除DefaultSharedPreferences之后 – 它完美的工作。 我不能只是说:人们不做甩尾,所以我不得不改变代码

这个链接也可能有帮助