getDefaultSharedPreferences和getSharedPreferences之间的区别

Jam*_*mes 217 android android-preferences sharedpreferences

Android getDefaultSharedPreferencesgetSharedPreferencesAndroid有什么区别?有人可以解释一下吗?

cop*_*lii 222

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;
}
Run Code Online (Sandbox Code Playgroud)

  • 糟糕的`getDefaultSharedPreferencesName`不公开,因为备份/恢复框架需要名称. (8认同)

wiz*_*ail 119

让我们回顾一下差异的基本点:

  1. getDefaultSharedPreferences()使用默认的首选项文件名.此默认值是针对每个应用程序设置的,因此同一应用程序上下文中的所有活动都可以轻松访问它,如下例所示:

    SharedPreferences spref = PreferenceManager.getDefaultSharedPreferences(this);
    if (spref.contains("email")) {
         String sEmailAddr = spref.getString("email", "");
    }
    
    Run Code Online (Sandbox Code Playgroud)

    首选项通常存储在/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()的充分理由,请在此处通过评论告诉我.

  • 我的理由是:http://stackoverflow.com/questions/10786172/android-getdefaultsharedpreferences (6认同)