鸿蒙5.0【OpenHarmony】持久化存储UI状态:PersistentStorage

概述

PersistentStorage将选定的AppStorage属性保留在设备磁盘上。应用程序通过API,以决定哪些AppStorage属性应借助PersistentStorage持久化。UI和业务逻辑不直接访问PersistentStorage中的属性,所有属性访问都是对AppStorage的访问,AppStorage中的更改会自动同步到PersistentStorage。

PersistentStorage和AppStorage中的属性建立双向同步。应用开发通常通过AppStorage访问PersistentStorage,另外还有一些接口可以用于管理持久化属性,但是业务逻辑始终是通过AppStorage获取和设置属性的。

限制条件

持久化数据是一个相对缓慢的操作,应用程序应避免以下情况:

● 持久化大型数据集。

● 持久化经常变化的变量。

PersistentStorage的持久化变量最好是小于2kb的数据,不要大量的数据持久化,因为PersistentStorage写入磁盘的操作是同步的,大量的数据本地化读写会同步在UI线程中执行,影响UI渲染性能。如果开发者需要存储大量的数据,建议使用数据库api。

PersistentStorage和UIContext相关联,需要在[UIContext]明确的时候才可以调用,可以通过在[runScopedTask]里明确上下文。如果没有在UIContext明确的地方调用,将导致无法持久化数据。

使用场景

从AppStorage中访问PersistentStorage初始化的属性

1.初始化PersistentStorage:</

### 鸿蒙OS 中的对象数组持久化存储方法 在鸿蒙操作系统(HarmonyOS)中,`PersistentStorage`不支持直接保存嵌套对象(如对象数组),因为当前框架无法检测到这些复杂结构变化并将其同步回`PersistentStorage`[^1]。 然而,可以通过序列化机制间接实现这一目标。具体来说,在将数据存入或取出时先转换成字符串形式: #### 序列化与反序列化的解决方案 对于需要存储的对象数组,可以考虑使用JSON格式作为中介来进行序列化和反序列化操作。以下是具体的实现方式: - **存储前处理**:当准备把对象数组放入持久化层之前,应先调用`JSON.stringify()`函数将JavaScript对象转化为JSON字符串; - **读取后恢复**:从持久化层获取到的数据会是以字符串的形式存在,则需通过`JSON.parse()`解析回原始的JavaScript对象表示; 下面给出一段简单的代码示例说明上述过程: ```javascript // 假设有如下待存储的对象数组 const items = [ { id: '001', name: 'Item One' }, { id: '002', name: 'Item Two' } ]; // 存储阶段 - 将对象数组转为 JSON 字符串再保存至 PersistentStorage AppStorage.set<string>('itemsList', JSON.stringify(items)); // 获取阶段 - 先从 PersistentStorage 取得 JSON 字符串然后还原成 JavaScript 对象 let storedItemsString = AppStorage.get<string>('itemsList'); if (storedItemsString !== null && typeof storedItemsString === "string") { let restoredItems = JSON.parse(storedItemsString); } ``` 此方案解决了`PersistentStorage`本身对复杂类型的限制问题,并且保持了一定程度上的灵活性和支持范围内的功能特性[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值