Давайте рассмотрим основные отличия:
getDefaultSharedPreferences()
использует имя файла настроек по умолчанию. Это значение по умолчанию установлено для каждого приложения, поэтому все действия в одном контексте приложения могут легко получить к нему доступ, как в следующем примере:
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_readable и т. Д.)
Как уже упоминалось в copolii, результат тот же, но первый вариант проще и ему не хватает гибкости для разделения на несколько файлов предпочтений, что предлагается вторым параметром getSharedPreferences()
.
Совместное использование предпочтений между приложениями, использующими индикатор работы MODE_WORLD_READABLE, также возможно при использовании getSharedPreferences()
, но используется редко.
ИМХО, getDefaultSharedPreferences()
можно безопасно использовать, не вдаваясь в путаницу имен файлов предпочтений, которые подвержены опечаткам и путанице, если только вы не хотите, чтобы разные модули в вашем приложении использовали разные файлы предпочтений. Обычно это не нужно. Если приложению необходимо сохранить много параметров, возможно, будет лучше использовать внешнюю базу данных, поскольку оно также обеспечивает лучшую защиту данных.
Если кто-то знает вескую причину для регулярного использования getSharedPreferences (), а не getDefaultSharedPreferences (), пожалуйста, дайте мне знать, комментируя здесь.