getDefaultSharedPreferences和getSharedPreferences之间的区别

Android中的getDefaultSharedPreferencesgetSharedPreferences什么区别? 谁能解释一下吗?

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. 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

  2. 另一种方法 – getSharedPreferences(name,mode)需要指定一个特定的首选项(文件)名称和操作模式(例如private,world_readable等)

正如copolii所提到的,结果是一样的,但是第一个选项比较简单,并且缺少将getSharedPreferences()的第二个选项提供的多个首选项文件的灵活性。 使用MODE_WORLD_READABLE操作指示器共享应用程序之间的偏好也可以使用getSharedPreferences() ,但很少使用。

恕我直言, getDefaultSharedPreferences()可以安全地使用,而不会陷入混乱的多个首选文件名称,容易出现拼写错误,除非你想在你的应用程序中的不同模块将使用不同的首选项文件。 通常这是不需要的。 如果一个应用程序需要保存大量参数,那么可能使用外部数据库会更好,因为它也提供了更好的数据保护。

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

还有第三个功能:

 public SharedPreferences Activity.getPreferences(int mode) {} 

在这里看到我的问题和答案: 与Android的共享首选项混乱 – 哪个函数使用?