getDefaultSharedPreferences和getSharedPreferences之间的区别
Android中的getDefaultSharedPreferences
和getSharedPreferences
什么区别? 谁能解释一下吗?
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; }
我们来回顾一下基本的区别点:
-
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()的一个好理由,请通过评论在这里告诉我。
还有第三个功能:
public SharedPreferences Activity.getPreferences(int mode) {}
在这里看到我的问题和答案: 与Android的共享首选项混乱 – 哪个函数使用?