2015-08-05 7 views
0

У меня есть технический вопрос об использовании SharedPreferences. Я знаю, что этот компонент предполагается использовать для хранения пользовательских настроек приложения (duh). В настоящее время я разрабатываю приложение таймера и нуждаюсь в некоторой постоянной информации о состоянии таймера (например, приостановлено, время запуска и т. Д. И т. Д.), И эта информация не является точно релевантной пользователю или связанной с ней.Использование SharedPreferences для сохранения состояния приложения

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

Есть ли лучшая структура данных для обработки этих постоянных переменных, или это нормально, если я продолжу использовать настройки?

Информация не может быть сохранена в Bundle, потому что ее не следует удалять, если приложение перестает работать.

+2

Нет проблем, если вы храните его в sharedPref, просто продолжайте работу. –

+1

Поскольку у вас есть только простые переменные для хранения, я согласен с тем, что SharedPreferences - это путь. Вы должны использовать SQLite только в том случае, если у вас есть несколько строк похожих данных. – anthonycr

+1

продолжают использовать общие настройки, в этом нет никаких проблем. – Aakash

ответ

1

Комментарии уже ответили на ваш вопрос, но я предоставлю некоторые детали.

Общие предпочтения упорядочиваются и хранятся в XML - например, для com.android.calendar приложение выглядит следующим образом:

$ adb shell ls -la /data/data/com.android.calendar/shared_prefs/ 
-rw-rw---- u0_a6 u0_a6   126 2015-08-03 17:21 _has_set_default_values.xml 
-rw-rw---- u0_a6 u0_a6   658 2015-08-05 23:05 com.android.calendar_preferences.xml 

И XML сериализации выглядеть следующим образом:

$ adb shell cat /data/data/com.android.calendar/shared_prefs/com.android.calendar_preferences.xml 
<?xml version='1.0' encoding='utf-8' standalone='yes' ?> 
<map> 
<string name="preferences_week_start_day">2</string> 
<string name="preferences_alerts_vibrateWhen">never</string> 
<int name="preferred_startView" value="3" /> 
<boolean name="preferences_alerts" value="true" /> 
<boolean name="preferences_hide_declined" value="true" /> 
<string name="preferences_alerts_ringtone">content://settings/system/notification_sound</string> 
<boolean name="preferences_home_tz_enabled" value="false" /> 
<string name="preferences_default_reminder">10</string> 
<string name="preferences_home_tz">GMT</string> 
<int name="preferences_default_cell_height" value="96" /> 
</map> 

You можно посмотреть, как это делается, посмотрев источник SharedPreferencesImpl, в котором звонил XmlUtils.writeMapXml, чтобы сохранить настройки ...

См. line 636, чтобы узнать, как каждое значение на карте записано в XML.

Также см. Этот вопрос Shared Preferences "limit", где @CommonsWare предупреждает, что весь XML-файл считывается в память, поэтому вы не хотите хранить «100KBS», я предполагаю, что он имеет в виду что-то вроде «сотни КБ». Разумный произвольный максимум, вероятно, составляет около нескольких сотен КБ.

Таким образом, я бы сказал, что пока данные, которые вы храните, являются легкими (то есть разумными для чтения/хранения) как XML в указанном выше формате, вы в порядке и не нуждаетесь в Sqlite.

+0

Спасибо за техническую информацию, я буду учитывать информацию о лимите, чтобы избежать злоупотребления настройками. – j1c1m1b1

Смежные вопросы