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用户的个性化偏好就能稳稳记住了。

相关新闻

最新新闻

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现 【免费下载链接】serenity The Serenity Operating System 🐞 项目地址: https://gitcode.com/GitHub_Trending/se/serenity 导读 本文以 getopt(3) 手册 为核心&a…

2026/9/25 12:45:43
轻量服务器还是ECS?大促云服务器选购与避坑实战指南

轻量服务器还是ECS?大促云服务器选购与避坑实战指南

每年大促节点,群里永远有人在问同一个问题:“38元的轻量服务器到底怎么抢?为什么我每次点进去都是已售罄?68元直购和99元的ECS我到底选哪个?”作为一个常年帮团队和自己采购云服务器的老用户,我太清楚这种纠…

2026/9/26 18:48:15
为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南

为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南

为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南 【免费下载链接】agents Multi-harness agentic plugin marketplace for Claude Code, Codex, Cursor, OpenCode, GitHub Copilot, and Google Antigravity 项目地址:…

2026/9/26 3:42:08
PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署

PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署

PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署 【免费下载链接】PaddleOCR Turn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between i…

2026/9/26 11:37:29
Spring源码解析:构造器注入的类型转换与候选匹配机制

Spring源码解析:构造器注入的类型转换与候选匹配机制

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/26 4:08:27
openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由

openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由

openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由 【免费下载链接】openai-agents-python A lightweight, powerful framework for multi-agent workflows 项目地址: https://gitcode.com/GitHub_Trending/op/openai-agents-pyth…

2026/9/25 15:49:36

日新闻

周新闻