Preferences

浏览示例。 浏览示例

本文介绍如何使用 .NET Multi-platform App UI (.NET MAUI) IPreferences 接口。 此接口有助于将应用 preferences 存储在键/值存储中。

IPreferences 接口的默认实现通过 Preferences.Default 属性提供。 IPreferences 接口和 Preferences 类都包含在 Microsoft.Maui.Storage 命名空间中。

存储类型

Preferences 使用 String 密钥存储。 首选项的值必须是下列数据类型之一:

DateTime 的值采用 DateTime 类定义的两种方法按 64 位二进制(长整型)格式进行存储:

  • ToBinary 方法用于对 DateTime 值进行编码。
  • FromBinary 方法对值进行解码。

请参阅这些方法的文档,了解当存储的 DateTime 为非协调世界时 (UTC) 值时可能对解码值进行的调整。

设置 preferences

Preferences 通过调用 Preferences.Set 方法来设置,提供密钥和值:

// Set a string value:
Preferences.Default.Set("first_name", "John");

// Set an numerical value:
Preferences.Default.Set("age", 28);

// Set a boolean value:
Preferences.Default.Set("has_pets", true);

Get preferences

要从 preferences 中检索值,请传递首选项的键,后跟默认值(如果键不存在):

string firstName = Preferences.Default.Get("first_name", "Unknown");
int age = Preferences.Default.Get("age", -1);
bool hasPets = Preferences.Default.Get("has_pets", false);

在某些情况下,可能需要传递首选项的密钥,后跟默认值及其类型:

long value = Preferences.Get("master_date", (long)0);

检查密钥

检查 preferences 中是否存在键可能很有用。 尽管 Get 让你设置了密钥不存在时的默认值,但可能存在密钥存在的情况,但密钥的值与默认值匹配。 因此,不能依赖默认值作为密钥不存在的指示器。 使用 ContainsKey 方法确定密钥是否存在:

bool hasKey = Preferences.Default.ContainsKey("my_key");

删除一个或所有密钥

使用 Remove 方法从 preferences 中删除特定键:

Preferences.Default.Remove("first_name");

若要删除所有密钥,请使用 Clear 方法:

Preferences.Default.Clear();

共享密钥

应用存储的 preferences 仅对应用可见。 但是,还可以创建可供其他扩展或监视应用使用的共享首选项。 设置、删除或检索首选项时,可以提供可选的字符串参数来指定存储首选项的容器的名称。

以下方法采用名为 sharedName 的字符串参数:

  • Preferences.Set
  • Preferences.Get
  • Preferences.Remove
  • Preferences.Clear

重要

请阅读平台实现细节,因为共享 preferences 具有特定于行为的实现

与系统设置集成

Preferences 以本机方式存储,这样便可将设置集成到本机系统设置。 按照平台文档中的说明与平台集成:

平台差异

本部分介绍 preferences API 特定于平台的差异。

所有数据均存储在共享 Preferences 中。 如果未指定 sharedName,则使用默认共享 Preferences。 否则,该名称用于获取具有指定名称的专用共享 Preferences

持久性

卸载应用程序会导致删除所有 preferences,除非应用在 Android 6.0 (API 级别 23) 或更高版本上运行,同时使用“自动备份”功能。 此功能默认启用并且会保留应用数据,包括共享 Preferences (即 API 使用的 Preferences)。 可以遵循 Google 的自动备份文档禁用此功能。

限制

如果存储大量文本,性能可能会受到影响,因为 API 旨在存储少量文本。