写点什么

鸿蒙用户首选项数据持久化

作者:最新动态
  • 2025-09-12
    湖北
  • 本文字数:1228 字

    阅读完需:约 4 分钟

踏入鸿蒙世界的敲门砖,标志着您在技术征途上的全新起点,提升就业竞争力,获得行业认可,点亮职业成长先机,快人一步抢占未来应用开发赛道!https://developer.huawei.com/consumer/cn/training/dev-cert-detail/101666948302721398?ha_source=hmosclass-infoq&ha_sourceId=89000233

用户首选项为应用提供 Key-Value 键值型的数据处理能力,支持应用持久化轻量级数据,并对其修改和查询。当用户希望有一个全局唯一存储的地方,可以采用用户首选项来进行存储。Preferences 会将该数据缓存在内存中,当用户读取的时候,能够快速从内存中获取数据,当需要持久化时可以使用 flush 接口将内存中的数据写入持久化文件中。Preferences 会随着存放的数据量越多而导致应用占用的内存越大,因此,Preferences 不适合存放过多的数据,也不支持通过配置加密,适用的场景一般为应用保存用户的个性化设置(字体大小,是否开启夜间模式)等。

动作机制

如图所示,用户程序通过 ArkTS 接口调用用户首选项读写对应的数据文件。开发者可以将用户首选项持久化文件的内容加载到 Preferences 实例,每个文件唯一对应到一个 Preferences 实例,系统会通过静态容器将该实例存储在内存中,直到主动从内存中移除该实例或者删除该文件。


约束限制

·首选项无法保证进程并发安全,会有文件损坏和数据丢失的风险,不支持在多进程场景下使用。

·Key 键为 string 类型,要求非空且长度不超过 1024 个字节。

·如果 Value 值为 string 类型,请使用 UTF-8 编码格式,可以为空,不为空时长度不超过 16MB。

·当存储的数据中包含非 UTF-8 格式的字符串时,请使用 Uint8Array 类型存储,否则会造成持久化文件出现格式错误造成文件损坏。

·当调用 removePreferencesFromCache 或者 deletePreferences 后,订阅的数据变更会主动取消订阅,重新 getPreferences 后需要重新订阅数据变更。

·不允许 deletePreferences 与其他接口多线程、多进程并发调用,否则会发生不可预期行为。

·内存会随着存储数据量的增大而增大,所以存储的数据量应该是轻量级的,建议存储的数据不超过 50MB,当存储的数据较大时,在使用同步接口创建 Preferences 对象和持久化数据时会变成耗时操作,不建议在主线程中使用,否则可能出现 appfreeze 问题。

开发步骤

1. 导入 @kit.ArkData 模块


2. 获取 Preferences 实例


3. 写入数据

使用 putSync()方法保存数据到缓存的 Preferences 实例中。在写入数据后,如有需要,可使用 flush()方法将 Preferences 实例的数据存储到持久化文件。


4. 读取数据

使用 getSync()方法获取数据,即指定键对应的值。如果值为 null 或者非默认值类型,则返回默认数据。


5. 删除数据

使用 deleteSync()方法删除指定键值对。


6. 数据持久化

应用存入数据到 Preferences 实例后,可以使用 flush()方法实现数据持久化。


7. 删除指定文件

使用 deletePreferences()方法从内存中移除指定文件对应的 Preferences 实例,包括内存中的数据。若该 Preference 存在对应的持久化文件,则同时删除该持久化文件,包括指定文件及其备份文件、损坏文件。


(转载自 51CTO,作者:龙儿筝)


用户头像

最新动态

关注

还未添加个人签名 2019-07-19 加入

还未添加个人简介

评论

发布
暂无评论
鸿蒙用户首选项数据持久化_最新动态_InfoQ写作社区