什么是 Shared Preferences?它在应用开发中如何使用?

Shared Preferences 是移动应用开发中的一项重要功能,让开发人员能够以键值对的形式存储和检索少量数据。这种机制特别适合存储用户设置、App 状态或其他必须在 App 会话之间保留的配置数据。Shared Preferences 是 Android 平台的一部分,提供了一种简单高效的持久化数据处理方式,无需复杂的数据库设置。

当 App 使用 Shared Preferences 时,数据存储在 App 内部存储中的一个 XML 文件里。这让 App 能够快速访问和更新数据,使用户的偏好和设置始终可用且保持最新,从而改善用户体验。Shared Preferences 在设计上轻量且为 App 私有,但它没有加密,因此非常适合在兼顾性能和易用性的 App 中存储非敏感数据。

Shared Preferences 是一种简单高效的方式,可以在设备的本地存储中以键值对的形式存储少量数据,让移动应用程序在会话之间保留用户设置和应用程序状态。这项功能非常适合存储用户偏好,例如主题设置或用户是否已登录,因为它提供了一种无需数据库的轻量级解决方案。即使应用程序被关闭或重新启动,数据仍然可供其使用,从而确保一致且个性化的用户体验。在需要快速访问持久化数据且安全要求适中的情况下,Shared Preferences 尤其有用,因为数据默认不加密;密码和其他机密信息不应以未加密的形式存储在其中。

More about Shared Preferences

Shared Preferences 是移动应用开发中的一项重要技术,可以以键值对的形式简单高效地存储少量数据。这种方法非常适合存储用户设置、应用程序偏好以及其他必须在 App 会话之间保留的持久化数据。Shared Preferences 特别适合快速访问数据和易用性至关重要的场景,例如用户设置、登录状态和 App 配置。

从技术上讲,Shared Preferences 将数据存储在位于 App 内部存储中的一个 XML 文件里。当 App 想要存储或检索数据时,它会通过一个处理读写操作的 API 与该文件交互。这使 Shared Preferences 既高效又易于实现,对于希望进行轻量级数据管理而不必处理复杂数据库操作的开发人员来说,这是一大优势。

Shared Preferences 可用于不同的场景,每种场景支持一种不同类型的数据处理:

  1. 存储用户设置:Shared Preferences 用于存储用户自定义的设置,例如主题、通知偏好或语言选择。这确保即使 App 被关闭后重新打开,用户的偏好也会保留。

  2. 会话管理:Shared Preferences 可用于存储与会话相关的数据,例如登录状态或用户 ID,让 App 能够在会话之间记住用户,而无需反复登录。访问令牌和其他机密信息应在存储前加密。

  3. 配置数据:应用程序可以存储 App 功能所需的配置数据,例如功能设置或默认值,从而无需更改代码即可轻松调整 App 的行为。机密的 API 密钥不应存放在 Shared Preferences 中,因为存储在设备上的任何内容都可能被提取。

Shared Preferences 最大的优势之一是简单高效。通过键值对轻松访问数据,让开发人员能够快速实现持久化数据存储,而不必操心复杂的数据库操作。数据也只能由特定的 App 访问,从而提供了一定程度的安全性和隐私保护。

Shared Preferences 资源消耗低,这是另一项重要优势。这项技术所需的存储空间和处理能力极少,因此非常适合资源优化至关重要的移动设备。由于数据存储在 App 的内部存储中,通常也能防止其他 App 访问。

在实践中,Shared Preferences 长期以来一直是在 Android App 中存储简单用户数据的标准方式。它通过记住用户的偏好和状态,使用户体验保持一致和个性化。它还可以减少重复的数据请求和网络调用,从而优化 App 的性能。

总之,Shared Preferences 是一种将简单与高效结合在一起的技术,它使数据存储对开发人员来说更加直观、易用。它无需复杂设置即可工作,并且资源消耗极少,这使其成为现代应用开发中的一项重要工具,而在现代应用开发中,快速、可靠的数据处理必不可少。

Frequently asked questions about Shared Preferences

什么是 Shared Preferences?它在 Android 开发中如何运作?

在 Android 开发中,Shared Preferences 是一种以键值对形式存储简单数据的机制,这些数据可以在应用程序的不同组件之间访问。这种方法非常适合存储不需要数据库的少量数据,例如用户设置或应用程序配置。

当应用程序使用 Shared Preferences 时,会创建一个包含所存储数据的文件,并且只有创建它的应用程序才能访问该文件。数据存储在应用程序内部存储中的一个 XML 文件里,在未经 root 的普通设备上,这可以防止其他 App 访问。开发人员可以使用 getSharedPreferences()、edit()、putString() 等方法轻松读写该文件,并使用 commit() 或 apply() 保存更改。

SQLite 数据库等存储解决方案更为复杂;相比之下,Shared Preferences 的实现要简单、快捷得多,尤其是在只需存储不要求结构化存储或复杂查询的简单数据时。这使 Shared Preferences 成为许多需要快速、轻松地存储和检索少量数据的应用程序的高效选择。

如何使用 Shared Preferences 存储和检索数据?

数据以键值对的形式存储在 Shared Preferences 中。首先获取一个 SharedPreferences 对象,通常使用 getSharedPreferences 和一个文件名。要存储数据,需要通过 edit() 打开编辑器,使用 putString 或 putBoolean 等方法添加值,然后使用异步写入的 apply() 或立即写入的 commit() 保存更改。

检索数据时使用 getString 或 getInt 等方法,并指定键以及在该键不存在时使用的默认值。对于较新的 Android 项目,Google 通常推荐使用 DataStore 作为更现代的替代方案,但键和值的原理是相同的。

Shared Preferences 中可以存储哪些数据类型?

Shared Preferences 支持简单的数据类型:文本字符串(String)、整数(int)、长整数(long)、小数(float)以及真/假值(boolean)。还可以存储一组文本字符串(Set of String)。

更复杂的对象无法直接存储。可以将它们转换为文本,例如转换为 JSON,但只建议对少量数据这样做。Shared Preferences 用于存储轻量级信息,例如用户设置、所选主题或是否已显示过介绍。更大或结构化的数据应存放在 Room 等数据库或文件中。

Shared Preferences 与 SQLite 等其他存储方式有什么区别?

Shared Preferences 以键值对的形式将少量数据存储在设备上的一个文件中。它使用简单,但不适合大量或复杂的数据,也无法进行真正的查询。

SQLite 通常通过 Room 使用,它是一种关系型数据库,可以处理大量结构化数据、表之间的关系以及高级搜索。文件则适合存放图片、文档和其他较大的数据。DataStore 是 Google 推出的较新的 Shared Preferences 替代方案,支持异步访问。如何选择取决于数据量:设置放在 Shared Preferences 或 DataStore 中,结构化数据放在数据库中。

如何保护存储在 Shared Preferences 中的数据?

Shared Preferences 中的数据以纯文本形式存储在 App 的私有文件夹中。其他 App 通常无法访问,但在已 root 的设备上或通过某些备份,该文件可能会被读取。因此,密码、令牌和其他敏感信息不应以未加密的形式存储。

敏感数据可以在存储前使用 Android Keystore 中保存的密钥进行加密,Android Keystore 专为保护加密密钥而设计。Jetpack 库 androidx.security:security-crypto 以前为此提供了 EncryptedSharedPreferences,但 Google 已于 2025 年 4 月从 1.1.0-alpha07 版本起将整个库标记为已弃用,包括 EncryptedSharedPreferences、EncryptedFile 和 MasterKey。Google 现在建议改用平台的常规 API,例如 SharedPreferences,并直接使用 Android Keystore:通过 KeyGenerator 生成密钥,并在存储前用它加密这些值。一般来说,应尽可能少地在设备上存储敏感信息。

使用 Shared Preferences 时应注意哪些限制?

Shared Preferences 用于存储少量简单数据。大量数据可能会拖慢 App,因为整个文件都会被加载到内存中,而在主线程上使用 commit() 写入可能会导致用户界面卡顿。

它没有内置对复杂对象、关系或查询的支持,数据也不会自动加密。它也没有类型安全,因此错误的键或数据类型只有在 App 运行时才会被发现。多个进程同时进行的更改无法得到可靠处理。对于更高级的需求,建议使用 DataStore、Room 或加密存储。

Shared Preferences for dummies

Shared Preferences 是移动 App 中的一项巧妙功能,让 App 能够记住别人告诉它的一些小信息。可以把它想象成一本小笔记本,App 可以在里面记下以后需要记住的事情。例如,一个能记住用户名的 App,在每次打开时就不必重新输入用户名,它正是使用 Shared Preferences 来存储这些信息的。这是一种简单快捷的方式,让 App 能够存储不占用太多空间、并且下次使用 App 时需要用到的数据。

发表评论