针对数据体积小、访问频率高、有加载速度有一定要求的轻量化数据。例如用户偏好设置、用户字体大小设置、应用配置参数等,使用传统的关系型数据库进行存储不仅显得笨重,还可能引入不必要的性能开销。此时用户首选项便成为了理想之选。

一、用户首选项概述

用户首选项(Preferences):提供了轻量级配置数据的持久化能力,并支持订阅数据变化的通知能力。不支持分布式同步,常用于保存应用配置信息、用户偏好设置等。

  • Key-Value数据结构
    一种键值型的数据结构Key是不重复的关键字,Value是数据值。
  • 非关系型数据库
    区别于关系数据库,不保证遵循ACID(Atomic、Consistency、Isolation及Durability)即原子性、一致性、隔离性、持久性原则特性,不采用关系模型来组织数据,数据之间无关系。
  • 数据存储量小
    用户首选项存储于内存之中,存储数据量过大会导致应用占用内存过多。
    当需要将这些数据持久化保存时,可以通过flush接口将内存中的数据写入到持久化文件中。然而随着存储数据量的增加,Preferences会占用更多的内存资源,因此它并不适合存储海量的数据。
  • 不支持数据加密
    用户首选项不支持数据加密。

基于用户首选项的Key-Value数据结构,以及非关系型数据库的小数据存储量和不支持数据加密的特性,其主要应用场景在于存储和管理应用的基本配置参数及用户偏好设置,因为这些设置通常不涉及敏感数据,且所需存储空间较小,典型的应用实例包括应用主题模式的偏好选择,以及应用字体大小的个性化调整等

二、用户首选项机制原理

用户首选项实际通过持久化文件的形式,存储在应用沙箱目录中。
HarmonyOS提供了一系列ArkTS接口,用户程序利用这些接口能够方便地读写用户首选项,我们可以将用户首选项的持久化文件内容,加载到Preferences实例中然后读取,同样也能通过PreFerence实例将数据写回到持久化文件。
每个持久化文件都唯一的关联到一个Preferences实例,系统会利用静态容器在内存中存储这些实例,直到他们被主动移除或相应的文件被删除。
值得注意的是,用户程序通过UIAbilityContext来获取Preferences实例,而每个Preferences实例都与一个特定的持久化文件相对应,由于一个用户程序可以拥有多个UIAbilityContext,因此它可以获取多个Preferences实例,只要每次获取Preferences实例时传入的应用上下文与之前一致,那么读取的持久化文件也会保持一致。从而保证了数据的持久化读写准确性。
在这里插入图片描述

在这里插入图片描述

三、用户首选项开发流程

  • 导入模块
    首先我们需要先导入ArkData中的preferences模块
    在这里插入图片描述

  • 获取preferences实例
    接下来我们需要获取preferences实例,以便持久化文件进行各种操作。
    我们主要利用preferences模块所提供的getPreferencesSync方法,来获取Preferences实例。
    getPreferencesSync方法包括两个关键参数,第一个是应用上下文对象,它决定了所获取的Preferences实例以及操作的持久化文件,该上下文对象通常从EntryAbility中获取,第二个参数是options,它 与Preferences实例的配置相关,options的主要作用是用于配置Preferences的实例名称。在这里,我们通过options参数为Preferences实例指定了一个名称,这样我们就成功的获取了一个名为myStore的Preferences实例。
    在这里插入图片描述

  • 保存数据
    获取Preferences实例后,我们就可以利用它进行数据读写操作了,首先可以使用putSync方法或者其对应的异步方法put来保存数据,由于用户实选项采用Key-Value数据结构来存储数据。因此在保存数据时,我们需要提供Key-Value键值对。在putSync方法中,这个参数即为Key值,它是不重复的关键字,可以确保数据的精确索引与访问,put方法的第二个参数是与Key值相对应的Value值。例如通过Preferences实例,我们可以保存一个键为startup,值为auto的键值对,需要注意的是,Value值支持多种数据类型,具体如表格所示,包括数字、字符串、布尔值以及他们对应的数组类型,还有Unit8Array等数据类型,在实际应用中,我们可以根据具体的业务需求,选择合适的数据类型进行存储。
    在这里插入图片描述

  • 读取数据
    数据保存成功后,接下来我们来尝试获取这些数据,主要使用的是getSync方法或者其异步版本get方法,第一个参数仍然是Key值,我们可以通过该Key值进行查询,并返回与之对应的值,第二个参数是默认返回值,当查询不到指定key对应的值时,会返回这个默认值。示例代码演示了如何通过查询startup键,来获取其对应的值,如果未找到该键,则返回default作为默认值
    在这里插入图片描述

  • 数据持久化
    为了确保用户配置信息在每次启动时都能保持一致,我们需要依赖数据的持久化机制,除了系统会定期自动执行持久化操作外,用户首选项还提供了flush方法,我们可以主动触发数据的持久化,从而避免数据的丢失,flush方法的参数是一个回调函数,当数据成功保存时,该回调函数的error参数为Undefined,若保存失败,则error参数会包含一个错误对象,我们可以利用它来判断持久化是否成功。
    在这里插入图片描述

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐