Réponses:
getDefaultSharedPreferences
utilisera un nom par défaut comme « com.example.something_preferences », mais getSharedPreferences
va exiger un nom.
getDefaultSharedPreferences
utilise en fait Context.getSharedPreferences
(ci-dessous est directement à partir de la source 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;
}
getDefaultSharedPreferencesName
n'est pas public car le nom est nécessaire pour le framework de sauvegarde / restauration.
Passons en revue les principaux points de différence:
getDefaultSharedPreferences()
utilise un nom de fichier de préférences par défaut. Cette valeur par défaut est définie par application, donc toutes les activités dans le même contexte d'application peuvent y accéder facilement comme dans l'exemple suivant:
SharedPreferences spref = PreferenceManager.getDefaultSharedPreferences(this);
if (spref.contains("email")) {
String sEmailAddr = spref.getString("email", "");
}
Les préférences sont généralement stockées sur /data/data/com.package.name/shared_prefs/com.package.name_preferences.xml
.
La méthode alternative - getSharedPreferences(name,mode)
nécessite d'indiquer un nom de préférence spécifique (fichier) et un mode de fonctionnement (par exemple privé, world_readable, etc.)
Comme mentionné par copolii, le résultat est le même, mais la première option est plus simple et manque de flexibilité pour se diviser en plusieurs fichiers de préférences, ce qui est offert par la deuxième option de getSharedPreferences()
. Le partage des préférences entre les applications à l'aide d'un indicateur de fonctionnement MODE_WORLD_READABLE est également possible getSharedPreferences()
, mais rarement utilisé.
A MON HUMBLE AVIS, getDefaultSharedPreferences()
peut être utilisé en toute sécurité sans entrer dans la confusion de plusieurs noms de fichiers de préférences sujets aux fautes de frappe et à la confusion, sauf si vous souhaitez que différents modules de votre application utilisent des fichiers de préférences différents. Normalement, cela n'est pas nécessaire. Si une application doit enregistrer de nombreux paramètres, l'utilisation d'une base de données externe sera probablement meilleure car elle offre également une meilleure protection des données.
Si quelqu'un connaît une bonne raison d'utiliser régulièrement getSharedPreferences () et non getDefaultSharedPreferences (), veuillez me le faire savoir en commentant ici.
Je sais que ce post est un peu ancien, mais depuis la version 24.0.1 de la bibliothèque de support v7, vous pouvez récupérer les préférences par défaut n'importe où en utilisant
// context might be an application context, activity, ..
// so if you want to get your apps defaults, pass an activity context
PreferenceManager.getDefaultSharedPreferences(context)
Il y a aussi une 3ème fonction:
public SharedPreferences Activity.getPreferences(int mode) {}
Voir ma question et réponse ici: Mess avec les préférences partagées d'Android - quelle fonction utiliser?
GetSharedPreferences () et getDefaultSharedPreferences () sont utilisés pour accéder aux préférences au niveau de l'application .getDefaultSharedPreferences () est utilisé pour obtenir les préférences partagées qui fonctionnent conformément au cadre de préférences général d'Android. Il est préférable d'utiliser getDefaultSharedPreferences () car il donne par défaut l'objet SharedPreferences qui fonctionne avec une PreferenceActivity.
N'oubliez pas que l'utilisation des préférences partagées par défaut n'est PAS la même chose que l'utilisation des préférences partagées avec le nom de votre package:
context.getSharedPreferences(getPackageName(), MODE_PRIVATE);
=> Nom des préférences partagées: " com.my.packagename "
PreferenceManager.getDefaultSharedPreferences(context);
=> Nom des préférences partagées: " com.my.packagename_preferences "
Context
instance pour appeler l'une ou l'autre.