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

【鸿蒙开发】基础干货篇--6 “超简单持久化存储PersistentStorage”

系列文章目录

【鸿蒙开发】鸿蒙开发基础干货篇–1
【鸿蒙开发】基础干货篇–2 小白入门手册(内含Dev Eco安装教程和汉化插件安装)
【鸿蒙开发】基础干货篇–3 小白入门手册 (内含模拟器保姆级安装使用教程)
【鸿蒙开发】基础干货篇–4 小白入门手册(内含Stage模型工程目录结构和UIAbility 组件详解)
【鸿蒙开发】基础干货篇–5 “一篇带你掌握应用状态”
【鸿蒙开发】“一篇带你掌握HAP、HAR、HSP”


文章目录

  • 系列文章目录
  • 前言
  • 一、PersistentStorage是什么?
  • 二、使用场景
    • 1.从AppStorage中访问PersistentStorage初始化的属性
    • 2.在PersistentStorage之后访问AppStorage中的属性
  • 三、注意事项
  • 总结


前言

前一篇介绍的LocalStorage和AppStorage都是运行时的内存,但是在应用退出再次启动后,依然能保存选定的结果,是应用开发中十分常见的现象,这就需要用到PersistentStorage。


一、PersistentStorage是什么?

PersistentStorage是应用程序中的可选单例对象。此对象的作用是持久化存储选定的AppStorage属性,以确保这些属性在应用程序重新启动时的值与应用程序关闭时的值相同。

原理解释:PersistentStorage将选定的AppStorage属性保留在设备磁盘上。UI和业务逻辑不直接访问PersistentStorage中的属性,所有属性访问都是对AppStorage的访问,AppStorage中的更改会自动同步到PersistentStorage。

二、使用场景

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

1.初始化PersistentStorage:

PersistentStorage.persistProp('aProp', 47);

2.在AppStorage获取对应属性:

AppStorage.get<number>('aProp'); // returns 47
//或者在组件内部定义:
@StorageLink('aProp') aProp: number = 48;

在这里插入图片描述

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

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

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

三、注意事项

  1. 可以被JSON.stringify()和JSON.parse()重构的对象,但是对象中的成员方法不支持持久化
  2. 不支持嵌套对象(对象数组,对象的属性是对象等)。因为目前框架无法检测AppStorage中嵌套对象(包括数组)值的变化,所以无法写回到PersistentStorage中。
  3. PersistentStorage和UI实例相关联,持久化操作需要在UI实例初始化成功后(即loadContent传入的回调被调用时)才可以被调用,早于该时机调用会导致持久化失败
  4. 调用PersistentStorage.persistProp或者persistProps之前使用接口访问AppStorage中的属性是错误的,因为这样的调用顺序会丢失上一次应用程序运行中的属性值。
  5. 我们应该避免以下两种情况:持久化大型数据集、持久化经常变化的变量。

总结

以上就是今天要讲的内容,本文仅仅简单介绍了PersistentStorage的使用。大家努力学习努力工作的同时也要好好吃饭喔~

我今天中午回去吃茄汁米粉~~


http://www.kler.cn/a/404756.html

相关文章:

  • ara::com 与 AUTOSAR 元模型的关系总结
  • 【2024亚太杯亚太赛APMCM C题】数学建模竞赛|宠物行业及相关产业的发展分析与策略|建模过程+完整代码论文全解全析
  • 使用uniapp开发微信小程序使用uni_modules导致主包文件过大,无法发布的解决方法
  • 【架构】主流企业架构Zachman、ToGAF、FEA、DoDAF介绍
  • 细说STM32单片机DMA中断收发RTC实时时间并改善其鲁棒性的另一种方法
  • iPhone 17 Air看点汇总:薄至6mm 刷新苹果轻薄纪录
  • 汽车资讯新视界:Spring Boot技术启航
  • 期权懂|期权中的行权和平仓的区别在于哪里?
  • 17. Linux下在虚拟环境中安装CUDA和CUDNN
  • 安装JDK
  • 数据跨网传输无忧:FileLink打造内外网文件传输的安全桥梁
  • 【使用 Docker 搭建云原生后端环境的详细教程】
  • 近期两篇NeRF/3DGS-based SLAM方案赏析:TS-SLAM and MBA-SLAM
  • 手写模拟Spring Boot启动过程功能
  • 【IDE】使用指南
  • MySQL win安装 和 pymysql使用示例
  • 【YOLOv11改进[注意力]】引入一种高效的直方图Transformer( Histoformer )模块(2024.1.25) + 图像恢复
  • dify部署和应用 | docker基础使用
  • 将网站地址改成https地址需要哪些材料
  • SpringCloud多机部署,负载均衡-LoadBalance
  • 丹摩|丹摩助力selenium实现大麦网抢票
  • 如何解决飞书网页文字无法复制的问题
  • 体积全息及平面全息图的衍射效率
  • vue3封装Element Plus table表格组件
  • 网络安全设备系列--安全隔离网闸
  • 代码随想录day44算法随想录|动态规划07