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

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

1. getPreferenceManager().setSharedPreferencesName(String PrefName); 2. PreferenceManager.getDefaultSharedPreferences(Context context) 3. Context.getSharedPreferences (String name, int mode) 

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

Solutions Collecting From Web of "При использовании getDefaultSharedPreferences и getSharedPreferences"

Пойдем один шаг за раз:

  1. setSharedPreferencesName() – это метод, который позволяет установить имя группы предпочтений для последующего использования. Это полезно, например, при использовании вспомогательного класса PreferencesActivity перед загрузкой предпочтений из файла ресурсов XML путем вызова addPreferencesFromResource() . Поэтому он не так распространен, как другие 2 метода, упомянутые выше.

  2. getDefaultSharedPreferences() использует имя по умолчанию, обычно хранящееся как /data/data/com.package.name/shared_prefs/com.package.name_preferences.xml. Он обычно используется. Обратите внимание, что это значение по умолчанию установлено для каждого приложения .

    Альтернативный метод – getSharedPreferences() требует указания конкретного имени предпочтения (файла) и режима работы.

  3. Как и в другом ответе об общих предпочтениях , getDefaultSharedPreferences() фактически использует Context.getSharedPreferences, поэтому результат тот же, но без гибкости для разделения на несколько файлов предпочтений, которые предлагаются getSharedPreferences() . Совместное использование предпочтений между приложениями с помощью MODE_WORLD_READABLE операции MODE_WORLD_READABLE также возможно с помощью getSharedPreferences() , но редко используется.

IMHO, getDefaultSharedPreferences () можно безопасно использовать, не впуская путаницы нескольких имен файлов предпочтений, которые подвержены опечаткам и путанице.

Если кто-то знает о хорошей причине использовать getSharedPreferences (), а не getDefaultSharedPreferences () , сообщите мне, комментируя здесь.

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 имеет некоторые недостатки

  1. Actualy getDefaultSharedPreferences не работает корректно на некоторых устройствах при сборке с помощью таргетинга api 13
  2. Запуск приложения из ярлыка и из меню дает мне разные DefaultSharedPreferences . После удаления DefaultSharedPreferences из моего кода – он работает отлично. Я не могу просто сказать: люди не делают shrotcuts, поэтому мне пришлось изменить код

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