HarmonyOS7 Preferences 轻量存储:配置项管理速查 文章目录前言先理解它是什么获取 Preferences 实例存put取get删delete实战记住用户主题选择避坑提醒常见误区小白必踩完整可运行示例Preferences 存配置代码实现写在最后前言不是所有数据都值得上数据库。比如用户是否同意过隐私协议“App 主题选了深色还是浅色”“上次的登录账号”——这些就是几个简单的键值对。这种场景用Preferences首选项最合适轻、快、API 简单像操作一个本地的小字典。这篇文章我把它的增删改查和典型用法讲清楚。先理解它是什么Preferences本质是一个以文件形式存在的键值对存储。你可以把它想象成手机里的一个小本子写着theme dark“agreed true”。关掉 app 再开本子还在。和数据库的区别Preferences 只存简单键值字符串、数字、布尔不支持查询、排序、多表。结构复杂、要检索的数据才用 relationalStore。获取 Preferences 实例import{preferences}fromkit.ArkDataletprefs:preferences.Preferencesasyncfunctioninit(){constcontextgetContext()prefsawaitpreferences.getPreferences(context,myConfig)// 文件名}getPreferences异步返回一个实例后续所有读写都通过它。myConfig是存储文件名不同业务可以用不同文件隔离。存putasyncfunctionsaveTheme(theme:string){awaitprefs.put(theme,theme)// 写入键值awaitprefs.flush()// 必须 flush 才真正落盘}重点写完一定要flush()或flushSync()否则只存在内存里app 一关就没了。这是新手最常漏的一步。取getasyncfunctiongetTheme():Promisestring{constthemeawaitprefs.get(theme,light)// 第二个参数是默认值returnthemeasstring}get的第二个参数是取不到时的默认值。key 不存在就返回它所以你不用先判断是否存在。返回的可能是string | number | boolean用as断言成你要的类型即可。删deleteasyncfunctionclearAgreement(){awaitprefs.delete(agreed)awaitprefs.flush()}删除单个 key 用delete同样记得flush。实战记住用户主题选择Localtheme:stringlightaboutToAppear(){// 启动时读取上次保存的主题this.loadTheme()}asyncloadTheme(){this.themeawaitprefs.get(theme,light)}asynctoggleTheme(){this.themethis.themelight?dark:lightawaitprefs.put(theme,this.theme)awaitprefs.flush()}这样用户切一次深色模式下次打开 app 还是深色——体验上的小细节靠 Preferences 轻松实现。避坑提醒坑现象解决忘了 flush存了但重启没了每次 put/delete 后 flush存大对象性能差、超限大/复杂数据用数据库频繁 flushIO 卡顿批量改完再统一 flush 一次常见误区小白必踩误区说明写完忘了flush()put只存内存不flush关 app 就没了。这是新手最常漏的一步。拿它存大对象Preferences 适合简单键值大/复杂数据请上 relationalStore。频繁flush每次改都落盘会卡 IO批量改完统一flush一次更高效。下面这段代码可以直接复制到 DevEco Studio 里运行。建议你边读边敲改一改文末「动手改一改」里的参数亲眼看看效果。完整可运行示例Preferences 存配置轻量 KV 存储最适合「是否首次启动」「主题开关」这类小配置。代码实现// Preferences轻量键值存储import{preferences}fromkit.ArkDataasyncfunctionsaveTheme(mode:string){constprefawaitpreferences.getPreferences(getContext(),config)awaitpref.put(theme,mode)awaitpref.flush()// 必须 flush 才真正落盘}asyncfunctionreadTheme():Promisestring{constprefawaitpreferences.getPreferences(getContext(),config)returnpref.get(theme,light)asstring}你会看到什么调用saveTheme(dark)后即使杀掉进程再启动readTheme()仍返回dark。这就是「配置项跨会话保留」。动手改一改用pref.delete(theme)清除配置验证回到默认值light。存一个对象先JSON.stringify再put读取时JSON.parse。把config文件名换成user_123体验多命名空间隔离。写在最后Preferences 是小数据的好朋友。判断标准很简单数据简单键值、量小、不需要查询 → 用 Preferences结构复杂要检索 → 用 relationalStore。把你 app 里那些设置项、开关、上次状态都搬进 Preferences再配上flush用户的个性化偏好就能稳稳记住了。

相关新闻

最新新闻

C++学习路径:从核心语法到现代特性,掌握系统编程基石

C++学习路径:从核心语法到现代特性,掌握系统编程基石

1. 项目概述:为什么C依然是技术人的硬通货?如果你在技术社区里泡久了,会发现一个有趣的现象:每隔一段时间,就会有人讨论“C是不是过时了”、“学C还有没有前途”。但与此同时,各大公司的核心系统、游戏引擎…

2026/7/13 5:19:52
为什么92%的团队在DeepSeek-R1和DeepSeek-RLHF-v2之间选错?6项生产级指标横向对比,立即止损!

为什么92%的团队在DeepSeek-R1和DeepSeek-RLHF-v2之间选错?6项生产级指标横向对比,立即止损!

更多请点击: https://intelliparadigm.com 第一章:DeepSeek-R1与DeepSeek-RLHF-v2的本质差异辨析 DeepSeek-R1 和 DeepSeek-RLHF-v2 虽同属 DeepSeek 系列大语言模型,但二者在训练范式、目标函数与部署定位上存在根本性分野。R1 是一个纯监督…

2026/7/13 5:19:52
EM3080-W与PIC18F4515的条码解码系统设计与优化

EM3080-W与PIC18F4515的条码解码系统设计与优化

1. EM3080-W与PIC18F4515的硬件架构解析EM3080-W作为专业级条码解码芯片,其内部采用双核DSP架构设计。主处理核心负责图像采集与预处理,工作频率达到120MHz,能够实时处理来自CMOS传感器的1280800分辨率图像数据。辅助协处理器专门优化了条码识…

2026/7/13 5:19:52
VSCode Remote-SSH 免密登录:3步配置与 2 个常见权限错误排查

VSCode Remote-SSH 免密登录:3步配置与 2 个常见权限错误排查

VSCode Remote-SSH 免密登录:3步配置与 2 个常见权限错误排查每次连接远程服务器都要输入密码?作为开发者,我们追求的是效率与流畅的体验。本文将带你深入理解VSCode Remote-SSH免密登录的核心机制,并提供一套完整的配置方案&…

2026/7/13 5:19:52
NREL SAM 2025.4.16 源码编译:Windows 10/11 下 CMake + VS2022 完整配置指南

NREL SAM 2025.4.16 源码编译:Windows 10/11 下 CMake + VS2022 完整配置指南

NREL SAM 2025.4.16 源码编译:Windows 10/11 下 CMake VS2022 完整配置指南可再生能源领域的工程师和研究人员经常需要定制化建模工具来满足特定项目需求。NREL(美国国家可再生能源实验室)开发的System Advisor Model(SAM&#x…

2026/7/13 5:19:52
VR工业组装:从虚拟预演到数字孪生,如何重塑制造业培训与工艺验证

VR工业组装:从虚拟预演到数字孪生,如何重塑制造业培训与工艺验证

1. 项目概述:当虚拟照进现实,工业组装迎来“预演”时代如果你在制造业一线待过,尤其是负责过复杂产品的组装、调试或新员工培训,一定对下面这些场景深有感触:新来的操作工面对几百个零件和几十页的图纸手册&#xff0c…

2026/7/13 5:14:52

月新闻