При использовании getDefaultSharedPreferences и getSharedPreferences
Мне просто интересно. Существует 3 метода:
1. getPreferenceManager().setSharedPreferencesName(String PrefName);
2. PreferenceManager.getDefaultSharedPreferences(Context context)
3. Context.getSharedPreferences (String name, int mode)
Как я знаю, третий метод используется только тогда, когда используется первый метод, верно?
Но с помощью 3 метода мы также используем addPreferencesFromResource(int resID)
;
так, в чем разница? Когда мы можем использовать один из этих методов?
Спасибо!
Ответы
Ответ 1
Отпустите шаг за шагом:
-
setSharedPreferencesName()
- это метод, который позволяет установить имя группы предпочтений для последующего использования. Это полезно, например, при использовании вспомогательного класса
PreferencesActivity перед загрузкой предпочтений из файла ресурсов XML путем вызова addPreferencesFromResource()
. Поэтому он не так распространен, как другие 2 метода, упомянутые выше.
-
getDefaultSharedPreferences()
использует имя по умолчанию, обычно хранящееся как /data/data/com.package.name/shared_prefs/com.package.name_preferences.xml.
Он обычно используется. Обратите внимание, что это значение по умолчанию установлено для каждого приложения.
Альтернативный метод - getSharedPreferences()
требует указания конкретного имени предпочтения (файла) и режима работы.
-
Как показано в другом ответе об общих настройках,
getDefaultSharedPreferences()
фактически использует Context.getSharedPreferences, поэтому результат тот же, но без гибкости для разделения на несколько файлов предпочтений, которые предлагаются getSharedPreferences()
. Совместное использование предпочтений между приложениями, используя
Индикатор операции MODE_WORLD_READABLE
также можно использовать с помощью getSharedPreferences()
, но редко используется.
IMHO, getDefaultSharedPreferences() можно безопасно использовать, не вдаваясь в путаницу нескольких имен файлов предпочтений, которые подвержены опечаткам и путанице.
Если кто-то знает о хорошей причине использовать getSharedPreferences(), а не getDefaultSharedPreferences(), пожалуйста, дайте мне знать, комментируя здесь.
Ответ 2
getDefaultSharedPreferences()
использует имя файла предпочтения по умолчанию, например "com.example.something_preferences"
. Это значение по умолчанию установлено для каждого приложения, поэтому все действия в одном и том же контексте приложения легко доступны, как в следующем примере:
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
getSharedPreference - лучший способ, поскольку использование getDefaultSharedPreferences имеет некоторые недостатки
- Actualy
getDefaultSharedPreferences
не работает корректно на некоторых
устройства при сборке с помощью таргетинга api 13
- Запуск приложения из ярлыка и из меню дает мне разные
DefaultSharedPreferences
. После удаления DefaultSharedPreferences
из моего кода - он работает отлично. Я не могу просто сказать: люди не делают
shrotcuts, поэтому мне пришлось изменить код
Эта ссылка также может помочь