Diferencia entre getDefaultSharedPreferences y getSharedPreferences

Resuelto James asked hace 54 años • 0 respuestas

¿ Cuál es la diferencia entre getDefaultSharedPreferencesy getSharedPreferencesen Android? ¿Alguien puede explicarlo?

James avatar Jan 01 '70 08:01 James
Aceptado

getDefaultSharedPreferencesutilizará un nombre predeterminado como "com.example.something_preferences", pero getSharedPreferencesrequerirá un nombre.

getDefaultSharedPreferencesde hecho usa Context.getSharedPreferences(a continuación se muestra directamente de la fuente de 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;
}
copolii avatar Jun 10 '2011 17:06 copolii

Repasemos los puntos básicos de diferencia:

  1. getDefaultSharedPreferences()utiliza un nombre de archivo de preferencias predeterminado. Este valor predeterminado se establece por aplicación, por lo que todas las actividades en el mismo contexto de la aplicación pueden acceder a él fácilmente, como en el siguiente ejemplo:

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

    Las preferencias normalmente se almacenan en /data/data/com.package.name/shared_prefs/com.package.name_preferences.xml.

  2. El método alternativo getSharedPreferences(name,mode)requiere indicar un nombre de preferencia (archivo) específico y un modo de operación (por ejemplo, privado, legible mundialmente, etc.)

Como mencionó copolii, el resultado es el mismo, pero la primera opción es más simple y carece de la flexibilidad para dividir en múltiples archivos de preferencias, que ofrece la segunda opción getSharedPreferences(). Compartir las preferencias entre aplicaciones usando un indicador de operación MODE_WORLD_READABLE también es algo posible usando getSharedPreferences(), pero rara vez se usa.

En mi humilde opinión, getDefaultSharedPreferences()se puede usar de forma segura sin entrar en la confusión de múltiples nombres de archivos de preferencias que son propensos a errores tipográficos y confusión, a menos que desee que diferentes módulos en su aplicación usen diferentes archivos de preferencias. Normalmente esto no es necesario. Si una aplicación necesita guardar muchos parámetros, probablemente será mejor usar una base de datos externa, ya que también ofrece una mejor protección de datos.

Si alguien conoce una buena razón para usar getSharedPreferences() con regularidad y no getDefaultSharedPreferences(), hágamelo saber comentando aquí.

wiztrail avatar Mar 01 '2012 14:03 wiztrail