【问题标题】:when use getDefaultSharedPreferences and getSharedPreferences当使用 getDefaultSharedPreferences 和 getSharedPreferences
【发布时间】:2012-03-12 04:53:35
【问题描述】:

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

1. getPreferenceManager().setSharedPreferencesName(String PrefName);

2. PreferenceManager.getDefaultSharedPreferences(Context context)

3. Context.getSharedPreferences (String name, int mode)

据我所知,第三种方法只有在使用第一种方法时才会使用,对吧? 但是对于 3 方法,我们也使用 addPreferencesFromResource(int resID); 那么区别是什么呢?我们什么时候可以使用其中一种方法? 谢谢!

【问题讨论】:

    标签: android


    【解决方案1】:

    让我们一步一步来:

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

    2. getDefaultSharedPreferences() 使用默认名称,通常存储为 /data/data/com.package.name/shared_prefs/com.package.name_preferences.xml。 它是常用的。请注意,此默认设置是每个应用程序

      替代方法 - getSharedPreferences() 需要指明特定的首选项(文件)名称和操作模式。

    3. 也出现在 another answer about shared preferences 中, getDefaultSharedPreferences() 实际上使用了 Context.getSharedPreferences,所以结果是一样的,但是没有getSharedPreferences() 提供的拆分到多个首选项文件的灵活性。在应用程序之间共享首选项 MODE_WORLD_READABLE 操作指示器也可以使用getSharedPreferences(),但很少使用。

    恕我直言,getDefaultSharedPreferences() 可以安全使用,而不会混淆容易出现拼写错误和混淆的多个首选项文件名。

    如果有人知道使用 getSharedPreferences() 而不是 getDefaultSharedPreferences() 的充分理由,请在此处发表评论告诉我。

    【讨论】:

    • 主要区别是(getDefaultSharedPreferences vs getSharedPreferences)——如果你想改变 getDefaultSharedPreferences 中的任何偏好值,那么使用 apply() 而不是 commit(),如果你在 getDefaultSharedPreferences 中使用提交,它永远不会应用任何效果....我花了超过 2 小时.. 对于这个愚蠢的错误,所以我在这里提一下。
    【解决方案2】:

    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. 实际上getDefaultSharedPreferences 在某些情况下无法正常工作 使用 targer api 13 构建时的设备
    2. 从快捷方式和菜单启动应用程序给了我不同的 DefaultSharedPreferences。删除 DefaultSharedPreferences 后 从我的代码 - 它完美无缺。我不能只说:人不做 快捷方式,所以我不得不更改代码

    这个link也可能有帮助

    【讨论】:

      猜你喜欢
      • 2011-08-22
      • 2015-04-22
      • 1970-01-01
      • 1970-01-01
      • 2012-06-02
      • 2011-07-20
      • 2014-09-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多