我只是好奇。有3种方法:
1. getPreferenceManager().setSharedPreferencesName(String PrefName);
2. PreferenceManager.getDefaultSharedPreferences(Context context)
3. Context.getSharedPreferences (String name, int mode)
据我所知,第三种方法仅在使用第一种方法时使用,对吧?
但是使用3方法我们也使用addPreferencesFromResource(int resID)
;
那么区别是什么呢?我们什么时候可以使用这些方法之一?
谢谢!
答案 0 :(得分:24)
让我们一步一步:
setSharedPreferencesName()
是允许设置首选项组名称供以后使用的方法。这有助于例如使用helper类时
在通过调用addPreferencesFromResource()
从XML资源文件加载首选项之前, PreferencesActivity 。因此,它不像您上面提到的其他两种方法那样常见。
getDefaultSharedPreferences()
使用默认名称,通常存储为/data/data/com.package.name/shared_prefs/com.package.name_preferences.xml。
它是常用的。请注意,此默认设置为每个应用程序。
替代方法 - getSharedPreferences()
需要指明特定的首选项(文件)名称和操作模式。
同样出现在another answer about shared preferences中,
getDefaultSharedPreferences()
实际上使用了Context.getSharedPreferences,因此结果是相同的,但没有灵活性可以拆分为多个首选项文件,由getSharedPreferences()
提供。使用分享应用之间的首选项
使用MODE_WORLD_READABLE
也可以使用getSharedPreferences()
操作指示符,但很少使用。
恕我直言, 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有一些缺陷
getDefaultSharedPreferences
对某些人的工作不正确
用targer构建时的设备api 13 DefaultSharedPreferences
。删除DefaultSharedPreferences后
从我的代码 - 它的工作完美。我不能只说:人们不会
shrotcuts,所以我不得不改变代码此link也可以提供帮助