[HarmonyOS][K老师]鸿蒙中首选项通过什么方式存储?存在什么地方?
原创
13720 浏览 355 点赞 0 收藏
先总结一下:
储存形式: 首选项(Preferences)通过键值对(Key-Value)的形式储存数据,用于为应用提供轻量级的数据处理能力,并支持数据的持久化储存
储存位置:默认储存位置为该应用的应用沙箱中
鸿蒙系统首选项(Preferences)存储机制详解
核心特性总结
| 特性 | 说明 |
|---|---|
| 存储形式 | 键值对(Key-Value)结构 |
| 数据特性 | 轻量级数据(<10KB)、非关系型、支持基本数据类型 |
| 存储位置 | 应用沙箱内部(私有目录) |
| 访问权限 | 仅限应用自身访问(系统级隔离) |
| 持久性 | 应用重启后数据保留 |
| 加密支持 | 可选数据加密存储 |
存储形式详解
键值对(Key-Value)结构:
// 示例数据结构
{
"user_token": "a1b2c3d4e5", // 字符串
"dark_mode_enabled": true, // 布尔值
"font_size": 16, // 数字
"recent_searches": ["咖啡", "书店", "公园"] // 字符串数组
}- 支持数据类型:基础类型:string, number, boolean集合类型:Array<string>, Array<number>, Array<boolean>不支持:复杂对象、嵌套数据、二进制数据
- 容量限制:单条数据:值不超过 8KB总数据量:建议不超过 10KB(超出时性能下降)
存储位置详解
应用沙箱路径:
/data/app/el2/100/base/<包名>/haps/<模块名>/preferences/- 目录结构示例:preferences/ ├── MainPreferences.xml // 默认首选项文件 ├── UserSettings.xml // 自定义首选项文件 └── encrypted_prefs/ // 加密存储目录(如果启用)
- 核心特性:沙箱隔离:每个应用有独立存储空间自动清理:卸载应用时系统自动删除数据访问控制:应用间无法互相访问用户无Root权限无法直接查看开发者可通过DevEco Studio的文件管理器调试
工作流程

使用示例
1. 初始化首选项
import dataPreferences from '@ohos.data.preferences';
// 获取首选项实例
const prefName = 'user_settings';
let preferences: dataPreferences.Preferences = await dataPreferences.getPreferences(context, prefName);2. 数据存取操作
// 写入数据
await preferences.put('dark_mode', true);
await preferences.put('last_login', '2023-07-12');
// 读取数据
let darkMode: boolean = await preferences.get('dark_mode', false); // 第二个参数为默认值
let lastLogin: string = await preferences.get('last_login', '');
// 删除数据
await preferences.delete('obsolete_key');
// 持久化保存(立即写入磁盘)
await preferences.flush();3. 加密存储(可选)
// 创建加密首选项
const options: dataPreferences.Options = {
encrypt: true, // 启用加密
securityLevel: dataPreferences.SecurityLevel.S2 // 安全等级
};
const securePref = await dataPreferences.getPreferences(context, 'secure_data', options);适用场景与限制
适用场景:
- 用户个性化设置(主题、字号等)
- 应用配置信息
- 登录状态/令牌存储
- 小型缓存数据(如搜索历史)
不适用场景:
- 大量结构化数据 → 使用关系型数据库
- 敏感信息(密码/支付信息) → 使用系统安全库
- 媒体文件/大文件 → 使用文件存储
性能优化建议
- 批量操作:集中写入后调用flush()preferences.put('key1', value1); preferences.put('key2', value2); await preferences.flush(); // 单次磁盘写入
- 内存管理:// 使用后释放资源 preferences.release();
- 数据分片:大型数据集拆分成多个首选项文件const userPrefs = await getPreferences(context, 'user_data'); const appPrefs = await getPreferences(context, 'app_config');
通过首选项机制,鸿蒙系统实现了轻量级数据的安全隔离存储,平衡了数据访问效率与安全性,是应用基础配置存储的理想解决方案。
©本站发布的所有内容,包括但不限于文字、图片、音频、视频、图表、标志、标识、广告、商标、商号、域名、软件、程序等,除特别标明外,均来源于网络或用户投稿,版权归原作者或原出处所有。我们致力于保护原作者版权,若涉及版权问题,请及时联系我们进行处理。
分类
HarmonyOS
标签
HarmonyOS
K老师
鸿蒙首选项
暂无评论数据
发布
相关推荐
以技术破局,以生态赋能|IAM亮相鸿蒙智选峰会,X5Ultra引领智家健康新趋势
云上修代码
2171
0鸿蒙智选720智能空气净化器铂境Pro Max亮相鸿蒙峰会 以硬核科技定义智慧健康新标杆
快乐编译者
1168
0华为全场景亮相AWE 2026:华为鸿蒙智家 智慧全生态重塑未来家
2030
0华为鸿蒙智家技术升级,多款新品亮相AWE2026
老李的控制台
1202
0微信鸿蒙版 App 扫码登录手表端要求公布,手机系统需升级至 HarmonyOS 6.0.0.130 及以上版本
1361
0K老师
大家好我是K老师,这是我的个人介绍:鸿蒙先锋,鸿蒙开发者达人,鸿蒙应用架构师,HDG组织者,可0-1开发纯血鸿蒙应用,可0-1开发前端加鸿蒙混合应用,可0-1开发PC端鸿蒙应用。
118
帖子
0
提问
1412
粉丝
最新发布
[HarmonyOS][K老师]鸿蒙中主线程与子线程通信机制详解,Emitter,Worker,EventHandler和EventRunner。
2026-01-28 11:31:47 发布[HarmonyOS][K老师]鸿蒙大文件上传方案。
2026-01-28 10:30:53 发布热门推荐