关于android:getDefaultSharedPreferences和getSharedPreferences之间的区别

Difference between getDefaultSharedPreferences and getSharedPreferences

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


getDefaultSharedPreferences将使用默认名称,例如" com.example.something_preferences",但getSharedPreferences将需要一个名称。

getDefaultSharedPreferences实际上使用了Context.getSharedPreferences(以下内容直接来自Android来源):

1
2
3
4
5
6
7
8
9
10
11
12
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()使用默认的首选项文件名。该默认值是针对每个应用程序设置的,因此,在同一应用程序上下文中的所有活动都可以轻松访问它,如以下示例所示:

    1
    2
    3
    4
    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_read等)

  • 正如copolii提到的,?峁窍嗤模堑谝桓鲅∠罡虻ィ⑶胰狈Σ鸱治喔鍪籽∠钗募牧榛钚裕馐?code>getSharedPreferences()的第二个选项所提供的。
    使用getSharedPreferences()也可以使用MODE_WORLD_READABLE操作指示器在应用之间共享首选项,但很少使用。

    >

    >
    恕我直言,getDefaultSharedPreferences()可以安全使用,而不会引起容易产生拼写错误和混乱的多个首选项文件名的混乱,除非您希望应用程序中的不同模块使用不同的首选项文件。通常不需要。如果应用程序需要保存很多参数,则使用外部数据库可能会更好,因为它还提供了更好的数据保护。

    >

    >
    如果有人知道有规律地定期使用getSharedPreference(ǎ┒皇莋etDefaultSharedPreference(ǎ┑某浞掷碛桑朐诖舜ζ缆垡愿嬷摇

    b>


    MXU11

    a>
    我知道这篇文章有点老了,但是由于v7支持库的24.0.1版本,您可以在任何地方使用上下文来检索默认首选?/p>b>

    1
    2
    3
    // context might be an application context, activity, ..
    // so if you want to get your apps defaults, pass an activity context
    PreferenceManager.getDefaultSharedPreferences(context)

    a>
    请参阅https://developer.android.com/reference/android/support/v7/preference/PreferenceManager#getdefaultsharedpreference


    XU11

    a>
    getSharedPreference(ǎ┖蚲etDefaultSharedPreference(ǎ┚糜诜梦视τ贸绦蚣镀谩etDefaultSharedPreference(ǎ┯糜诨袢》螦ndroid整体偏好框架的共享偏好。 getDefaultSharedPreference(ǎ┳詈檬褂茫蛭峁┝四锨榭鱿掠隤referenceActivity一起使用的SharedPreferences对象?/p>


    11

    a>
    还有第三个功能?/p>b>

    1
    public SharedPreferences Activity.getPreferences(int mode) {}

    a>
    看到我的问题和答案在这里:混乱与android的共享的首选项-使用哪个功能?/p>b


    PMXU11

    a>
    请注意,使用默认共享首选项与在包名称中使用共享首选项是不同的?/p>b>

    1
    context.getSharedPreferences(getPackageName(), MODE_PRIVATE);

    a>
    =>共享首选项的名称:" com.my.packagename

    b>

    1
    PreferenceManager.getDefaultSharedPreferences(context);

    a>
    =>共享首选项的名称:" com.my.packagename_preferences

    b>