Разница между getDefaultSharedPreferences и getSharedPreferences
В чем разница между getDefaultSharedPreferences
и getSharedPreferences
в Android? Может кто-нибудь объяснить?
- Как добавить кнопку на экран предпочтения?
- Как открыть или имитировать щелчок на андроиде Предпочтение, созданное с помощью XML, программно?
- Как использовать Percentage для макета Android?
- Как добавить кнопку на экран предпочтений
- Misbehavior при попытке сохранить набор строк с помощью SharedPreferences
- Каков максимальный размер для общего значения предпочтений Android?
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; }
Давайте рассмотрим основные отличительные моменты:
-
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()
, но редко используется.
IMHO, getDefaultSharedPreferences()
можно безопасно использовать, не вдаваясь в путаницу с несколькими именами файлов предпочтений, которые подвержены опечаткам и путанице, если вы не хотите, чтобы в вашем приложении разные файлы предпочтений использовались. Обычно это не нужно. Если приложение должно сохранять множество параметров, возможно, использование внешней базы данных будет лучше, так как оно также обеспечивает лучшую защиту данных.
Если кто-то знает о хорошей причине регулярно использовать getSharedPreferences (), а не getDefaultSharedPreferences (), пожалуйста, дайте мне знать, комментируя здесь.
Есть и 3-я функция:
public SharedPreferences Activity.getPreferences(int mode) {}
См. Мой вопрос и ответ здесь: Mess с общими предпочтениями android – какую функцию использовать?
Оба метода getSharedPreferences () и getDefaultSharedPreferences () используются для доступа к предпочтениям на уровне приложения .getDefaultSharedPreferences () используется для получения общих настроек, которые работают в соответствии с общей базой предпочтений Android. getDefaultSharedPreferences () лучше использовать, поскольку он дает по умолчанию объект SharedPreferences, который работает с PreferenceActivity.
Я знаю, что это сообщение немного устарело, но с 24.0.1 библиотеки поддержки v7 вы можете получать настройки по умолчанию в любом месте, используя
// context might be an application context, activity, .. // so if you want to get your apps defaults, pass an activity context PreferenceManager.getDefaultSharedPreferences(context)