AppStorage,PersistentStorage与StorageLink
AppStorage是应用全局状态管理器,数据存储于内存中,常见的如全局的黑暗模式,StorageLink是用来绑定AppStorage的键到ui上的工具,省去了用户手写代码的无聊过程,PersistentStorage可以绑定AppStorage的键,自动持久化到磁盘,同时支持多设备同步,也省去了无聊的手写代码过程,这个点上真的是非常方便
PersistentStorage.persistProp(‘theme’, ‘system’); 这个代码直接持久化绑定了AppStorage里面的Theme的值,所以不需要AppStorage再写一遍存储逻辑了
// 1. 初始化函数
function initApp() {// 设置持久化属性PersistentStorage.persistProp('userInput', '初始值');
}// 2. 主页面组件
@Entry
@Component
struct SimplestDemo {// 双向绑定到持久化属性@StorageLink('userInput') input: string = '';aboutToAppear() {initApp(); // 初始化应用状态}build() {Column() {// 显示当前值Text(`当前值: ${this.input}`)// 输入框TextInput({ text: this.input }).onChange((value: string) => {this.input = value;//这里会同时持久化到磁盘里面})// 重置按钮Button('重置为默认值').onClick(() => {this.input = '初始值';})}}
}
state
页面或组件内部的数据,用于绑定到UI
数据存储方案对比
PersistentStorage/Preferences/relationalStore/localStorage /AppStorage
方案 | 数据位置 | 生命周期 | 数据类型支持 | 典型应用场景 | 性能特点 |
---|---|---|---|---|---|
AppStorage | 内存 | 应用运行时 | 任意类型 | 全局状态共享 | 高速访问 |
PersistentStorage | 内存+磁盘 | 应用重启后保持 | 基本类型(string/number/boolean) | 主题/语言设置等小数据持久化 | 自动同步,中等性能 |
Preferences | 磁盘 | 持久化存储 | 可序列化数据 | 用户配置、登录令牌等结构化数据 | 异步操作,适合中小数据 |
relationalStore | 磁盘 | 持久化存储 | 结构化关系数据 | 通讯录、消息记录等复杂数据 | 支持SQL,事务处理 |
localStorage | 内存 | 页面生命周期 | 任意类型 | 页面内组件间状态共享 | 快速,页面关闭即释放 |
文件存储 | 磁盘 | 持久化存储 | 任意二进制/文本 | 图片、音视频、大文件 | 灵活,适合大数据 |
LocalStorage 只限在同一个uiability里面共享数据,跨page需要使用const storage = LocalStorage.getShared();来获取
简单全局配置的多设备同步
// 1. 启用分布式同步(只需一行)
PersistentStorage.persistProp('theme', 'system', true); // 第三个参数 true 启用同步
// 2. 组件中使用
@Entry
@Component
struct ThemeSetting {// 双向绑定(自动同步)@StorageLink('theme') theme: string = 'system';
//3.权限配置(module.json5)
{"module": {"requestPermissions": [{"name": "ohos.permission.DISTRIBUTED_DATASYNC","reason": "同步主题设置"}]}
}