Android中getDefaultSharedPreferences
和getSharedPreferences
之间有什么区别?有人可以解释一下吗?
答案 0 :(得分:221)
getDefaultSharedPreferences
将使用默认名称,例如“com.example.something_preferences”,但getSharedPreferences
将要求一个名称。
getDefaultSharedPreferences
实际上使用Context.getSharedPreferences
(以下是直接来自Android来源):
public static SharedPreferences getDefaultSharedPreferences(Context context) {
return context.getSharedPreferences(getDefaultSharedPreferencesName(context),
getDefaultSharedPreferencesMode());
}
private static String getDefaultSharedPreferencesName(Context context) {
return context.getPackageName() + "_preferences";
}
private static int getDefaultSharedPreferencesMode() {
return Context.MODE_PRIVATE;
}
答案 1 :(得分:118)
让我们回顾一下差异的基本点:
getDefaultSharedPreferences()
使用默认的首选项文件名。此默认值是针对每个应用程序设置的,因此同一应用程序上下文中的所有活动都可以轻松访问它,如以下示例所示:
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
。
替代方法 - getSharedPreferences(name,mode)
需要指明特定的首选项(文件)名称和操作模式(例如private,world_readable等)
正如copolii所提到的,结果是相同的,但第一个选项更简单,并且缺乏分割到多个首选项文件的灵活性,这是由getSharedPreferences()
的第二个选项提供的。
使用MODE_WORLD_READABLE操作指示符在应用程序之间共享首选项也可以使用getSharedPreferences()
,但很少使用。
恕我直言,getDefaultSharedPreferences()
可以安全使用,而不会混淆容易出现错别字和混淆的多个偏好文件名,除非您希望应用中的不同模块使用不同的偏好文件。通常这不是必需的。如果一个应用需要保存很多参数,可能使用外部数据库会更好,因为它提供了更好的数据保护。
如果有人知道经常使用getSharedPreferences()而不是getDefaultSharedPreferences()的充分理由,请在此处通过评论告诉我。
答案 2 :(得分:1)
还有第三个功能:
public SharedPreferences Activity.getPreferences(int mode) {}
请在此处查看我的问题和答案:Mess with the shared preferences of android - which function to use?
答案 3 :(得分:1)
getSharedPreferences()和getDefaultSharedPreferences()都用于访问应用程序级首选项.getDefaultSharedPreferences()用于获取符合Android整体首选框架的共享首选项。 getDefaultSharedPreferences()最好使用,因为它提供了默认情况下与PreferenceActivity一起使用的SharedPreferences对象。
答案 4 :(得分:1)
我知道这篇文章有点老了,但是由于v7支持库的24.0.1版本,您可以使用上下文在任何地方通过上下文检索默认首选项
// context might be an application context, activity, ..
// so if you want to get your apps defaults, pass an activity context
PreferenceManager.getDefaultSharedPreferences(context)
答案 5 :(得分:0)
请注意,使用默认的共享首选项与使用包名称的共享首选项相同:
context.getSharedPreferences(getPackageName(), MODE_PRIVATE);
=>共享首选项的名称:“ com.my.packagename ”
PreferenceManager.getDefaultSharedPreferences(context);
=>共享首选项的名称:“ com.my.packagename_preferences ”