当前位置: 首页 > news >正文

HarmonyOS | 状态管理(八) | PersistentStorage(持久化存储UI状态)

系列文章目录

1.HarmonyOS | 状态管理(一) | @State装饰器
2.HarmonyOS | 状态管理(二) | @Prop装饰器
3.HarmonyOS | 状态管理(三) | @Link装饰器
4.HarmonyOS | 状态管理(四) | @Provide和@Consume装饰器
5.HarmonyOS | 状态管理(五) | @Observed装饰器和@ObjectLink装饰器
6.HarmonyOS | 状态管理(六) | LocalStorage(页面级UI状态存储)
7.HarmonyOS | 状态管理(七) | AppStorage(应用级UI状态存储)


文章目录

  • 系列文章目录
  • 前言
  • 一、PersistentStorage的作用是什么?
  • 二、PersistentStorage的特性
  • 三、限制条件
  • 四、使用场景
    • 1.从AppStorage中访问PersistentStorage初始化的属性
    • 2.在PersistentStorage之前访问AppStorage中的属性
    • 3.在PersistentStorage之后访问AppStorage中的属性
  • 总结


前言

上一篇我们讲到了应用级UI状态存储(AppStorage),本篇我们来讲下持久化存储UI状态(PersistentStorage)


一、PersistentStorage的作用是什么?

PersistentStorage的作用是:应用退出再次启动后,依然能保存选定的结果。

二、PersistentStorage的特性

  • PersistentStorage将选定的AppStorage属性保留在设备磁盘上。

  • 应用程序通过API,以决定哪些AppStorage属性应借助PersistentStorage持久化。

  • UI和业务逻辑不直接访问PersistentStorage中的属性,所有属性访问都是对AppStorage的访问,AppStorage中的更改会自动同步到PersistentStorage。

  • PersistentStorage和AppStorage中的属性建立双向同步。应用开发通常通过AppStorage访问PersistentStorage。

三、限制条件

PersistentStorage允许的类型和值有:

  • number, string, boolean, enum 等简单类型。
  • 可以被JSON.stringify()和JSON.parse()重构的对象。例如Date, Map, Set等内置类型则不支持,以及对象的属性方法不支持持久化。

PersistentStorage不允许的类型和值有:

  • 不支持嵌套对象(对象数组,对象的属性是对象等)。因为目前框架无法检测AppStorage中嵌套对象(包括数组)值的变化,所以无法写回到PersistentStorage中。
  • 不支持undefined 和 null 。

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

  • 持久化大型数据集。
  • 持久化经常变化的变量。

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

PersistentStorage只能在UI页面内使用,否则将无法持久化数据。

四、使用场景

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

PersistentStorage.PersistProp('aProp', 47);@Entry
@Component
struct PersistentStoragePage {@StorageLink('aProp') aProp: number = 48build() {Row() {Column() {// 应用退出时会保存当前结果。重新启动后,会显示上一次的保存结果Text(`${this.aProp}`).onClick(() => {this.aProp += 1;})}}}
}

2.在PersistentStorage之前访问AppStorage中的属性

在调用PersistentStorage.PersistProp或者PersistProps之前使用接口访问AppStorage中的属性是错误的,因为这样的调用顺序会丢失上一次应用程序运行中的属性值。

let aProp = AppStorage.SetOrCreate('aProp', 47);
PersistentStorage.PersistProp('aProp', 48);

3.在PersistentStorage之后访问AppStorage中的属性

开发者可以先判断是否需要覆盖上一次保存在PersistentStorage中的值,如果需要覆盖,再调用AppStorage的接口进行修改,如果不需要覆盖,则不调用AppStorage的接口。

PersistentStorage.PersistProp('aProp', 48);
if (AppStorage.Get('aProp') > 50) {// 如果PersistentStorage存储的值超过50,设置为47AppStorage.SetOrCreate('aProp',47);
}

总结

  1. PersistentStorage的作用是:应用退出再次启动后,依然能保存选定的结果。
http://www.lryc.cn/news/307735.html

相关文章:

  • Git 突破 文件尺寸限制
  • HarmonyOS开发云工程与开发云函数
  • SpringMVC了解
  • day44((VueJS)路由的懒加载使用 路由的元信息(meta) 路由守卫函数 vant组件库的应用)
  • 非线性优化资料整理
  • 踩坑wow.js 和animate.css一起使用没有效果
  • Laravel - API 项目适用的图片验证码
  • iMazing3安全吗?好不好用?值不值得下载
  • 韩国突发:将批准比特币ETF
  • Kubernetes IoTDB系列 | IoTDB数据库同步|IoTDB数据库高可用
  • 重拾前端基础知识:CSS
  • 综合实战(volume and Compose)
  • 国际黄金价格要具体市况具体分析
  • 【python】0、超详细介绍:json、http
  • 可观测性在威胁检测和取证日志分析中的作用
  • win32com打开带密码excel
  • IntelliJ IDEA 的常用快捷键
  • C语言统计成绩
  • LVS做集群四层负载均衡的简单理解
  • 2.1_6 线程的实现方式和多线程模型
  • 4.5 MongoDB 文档存储
  • 什么是服务级别协议(SLA)?
  • 使用Python进行Sentinel-2 图像聚类
  • SNZ资本的首席信息官Gavin确认出席Hack .Summit() 2024香港开发者大会!
  • js里面有引用传递吗?
  • C 语言 math.h 库介绍
  • Eigen-Matrix矩阵
  • 蓝桥杯14届计算思维国赛U8组包含真题和答案
  • opencv内存溢出del释放变量 (python)
  • 【算法与数据结构】复杂度深度解析(超详解)