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 以本机方式存储,这样便可将设置集成到本机系统设置。 按照平台文档中的说明与平台集成:
- Apple:实现 iOS 设置捆绑
- Android:设置屏幕入门
平台差异
本部分介绍 preferences API 特定于平台的差异。
所有数据均存储在共享 Preferences 中。 如果未指定 sharedName
,则使用默认共享 Preferences。 否则,该名称用于获取具有指定名称的专用共享 Preferences。
持久性
卸载应用程序会导致删除所有 preferences,除非应用在 Android 6.0 (API 级别 23) 或更高版本上运行,同时使用“自动备份”功能。 此功能默认启用并且会保留应用数据,包括共享 Preferences (即 API 使用的 Preferences)。 可以遵循 Google 的自动备份文档禁用此功能。
限制
如果存储大量文本,性能可能会受到影响,因为 API 旨在存储少量文本。