Подтвердить что ты не робот

При использовании getDefaultSharedPreferences и getSharedPreferences

Мне просто интересно. Существует 3 метода:

1. getPreferenceManager().setSharedPreferencesName(String PrefName);

2. PreferenceManager.getDefaultSharedPreferences(Context context)

3. Context.getSharedPreferences (String name, int mode)

Как я знаю, третий метод используется только тогда, когда используется первый метод, верно? Но с помощью 3 метода мы также используем addPreferencesFromResource(int resID); так, в чем разница? Когда мы можем использовать один из этих методов? Спасибо!

4b9b3361

Ответ 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, поэтому мне пришлось изменить код

Эта ссылка также может помочь