Чтобы инициализировать настройки со значениями по умолчанию из XML-файла, описывающего настройки, я могу позвонить PreferenceManager.setDefaultValues(this, R.xml.preference, false)
.Звучит просто, но я не совсем уверен, когда именно я должен это назвать?
Как я понял из документов, приведенный выше вызов необходим только один раз, в случае, когда никакие предпочтения еще не установлены.В результате этого вызова будут установлены предпочтения, расположенные в /data/data/<myapp>/shared_prefs
, поэтому все последующие попытки прочитать предпочтения получат значения по умолчанию.Логически, setDefaultValues
должен вызываться в каждом пути кода, который может быть выполнен без инициализации предпочтений.Со временем это оказалось в нескольких местах - основное действие, другое действие, фоновый сервис, небольшая BroadcastReceiver
обработка системных сообщений ... Сейчас я поставил вызов setDefaultValues
в onCreate()
для моего объекта Application,как я уже использую его как удобный синглтон для других вещей.
Вопросы:
- Есть ли у меня гарантия, что при каждом выполнении моего кода будет создаваться объект Application и запускаться onCreate?
- Как вы справляетесьЭта проблема?Другим способом было бы жестко закодировать значения по умолчанию в вызовы
getFoo(key, defValue)
, но это эффективно рассеивает ваши настройки по умолчанию по всему коду.
EDIT : По сути, я не знаюкакое решение хуже: вызывая setDefaultValues
каждый раз, когда я получаю доступ к prefs по заданному пути кода, или вызывая его в каком-то обычном месте (например, в onCreate приложения), независимо от того, нужен он мне или нет.