【问题标题】:Using SharedPreferences to store application state使用 SharedPreferences 存储应用程序状态
【发布时间】:2015-10-28 19:42:47
【问题描述】:

我有一个关于使用 SharedPreferences 的技术问题。我知道这个组件应该用于存储应用程序的用户特定偏好(duh)。我目前正在开发一个计时器应用程序,需要一些关于计时器状态的持久信息(即暂停、开始时间等),而这些信息与用户并不完全相关或相关。

我认为对这个简单的变量使用 SQLite 存储是一种过载,因为我将有一个只有一行的表,并且游标管理应该是异步的,因为查询信息不应该在 UI 线程中进行。

是否有更好的数据结构来处理这些持久变量,或者如果我继续使用首选项可以吗?

信息不能存储在 Bundle 中,因为如果应用程序停止运行,它不应该被删除。

【问题讨论】:

  • 把它保存在sharedPref中没有问题,继续你的工作吧
  • 由于您只有简单的变量要存储,我同意 SharedPreferences 是要走的路。如果你有多行相似的数据,你应该只使用 SQLite。
  • 继续使用共享偏好,没有问题。
  • 感谢您解决我的问题,我现在可以轻松编码

标签: android performance


【解决方案1】:

cmets 已经回答了你的问题,但我会提供一些细节。

共享首选项被序列化并存储在 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>

您可以通过查看SharedPreferencesImpl 的源代码来了解这是如何完成的,它调用XmlUtils.writeMapXml 来保存首选项...

请参阅line 636,了解映射中的每个值是如何写入 XML 的。

另见Shared Preferences "limit" 这个问题@CommonsWare 警告整个 XML 文件已读入内存,因此您不想存储“100KBS”,我认为他的意思是“数百 KB”。一个合理的任意最大值可能在几百 KB 左右。

所以我想说,只要您存储的数据是轻量级的(即可以合理地读取/存储)为上述格式的 XML,您就可以,不需要 Sqlite。

【讨论】:

  • 感谢您提供技术信息,我将考虑有关限制的信息以避免滥用偏好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-15
  • 1970-01-01
  • 1970-01-01
  • 2021-06-11
相关资源
最近更新 更多