SharedPreferences иногда удаляются - PullRequest
20 голосов
/ 16 сентября 2011

Мое приложение использует SharedPreferences (с помощью PreferenceActivity) для хранения всех настроек.Но иногда все настройки удаляются, и все значения возвращаются к значениям по умолчанию.В основном на вкладках Android 3.x.На обычных смартфонах проблем нет.

Я заметил, что все настройки удаляются, когда процесс приложения убивает Android.Я заметил это, потому что значок уведомления больше не отображается.Мне также интересно, почему процесс убит на планшетах, а не на смартфонах.На моем смартфоне значок уведомления никогда не исчезает.

В моем приложении также есть служба, основной процесс и служба, которая читает и записывает настройки в SharedPreferences.Я иногда замечал, что все настройки сбрасываются, когда служба записывает в SharedPreferences.Но это происходит не каждый раз.

Есть идеи?Я понимаю, что SharedPreferences не должны использоваться разными процессами, но он работает на всех смартфонах без проблем!

Ответы [ 3 ]

20 голосов
/ 21 сентября 2011

Я выяснил причину исчезновения настроек: Если два процесса записывают данные в SharedPreferences, может случиться так, что для всех SharedPreferences будут установлены значения по умолчанию. В моем случае все настройки очищаются, когда служба записывает первые данные в SharedPreferences.

Теперь сервис предоставляет доступ только для чтения к SharedPreferences. Настройки, к которым обращаются оба процесса записи, хранятся в базе данных.

3 голосов
/ 30 октября 2013

У меня была такая же проблема. Все значения из общих настроек становятся значениями по умолчанию, если одно значение иногда записывается с key = null. Это возможно, когда вы создаете новые константы с помощью Eclipse, который по умолчанию присваивает им нулевое значение, а затем вы забыли перейти к началу класса и изменить константу на какое-то значимое значение. Если вы продолжите использовать приложение, операция чтения общих настроек вернет действительные значения. Но при изменении контекста (например, когда активность убита android и воссоздана) все значения из общих настроек вернут значения по умолчанию (нули).

Так проверьте ключи ваших общих настроек! Надеюсь, этот ответ кому-нибудь поможет.

2 голосов
/ 16 сентября 2011

SharedPreferences обычно отлично работают, и, как вы упомянули, без проблем на смартфонах.Это также должно работать на планшетах.Однако было бы лучше использовать sqlite или создать резервную копию ваших общих настроек на сервере для каждого пользователя. Потеря данных id - это проблема.

...