首页 > 其他分享 >鸿蒙Next持久化存储PersistentStorage用法总结

鸿蒙Next持久化存储PersistentStorage用法总结

时间:2024-12-12 09:53:35浏览次数:2  
标签:AppStorage 持久 鸿蒙 Next persistProp PersistentStorage 属性 aProp

一、概述

PersistentStorage是应用程序中的可选单例对象,用于持久化存储选定的AppStorage属性,确保这些属性在应用程序重新启动时的值与关闭时相同。它将属性保留在设备磁盘上,UI和业务逻辑通过AppStorage访问其属性,AppStorage中的更改会自动同步到PersistentStorage,二者建立双向同步。

二、限制条件

  1. 允许的类型和值
    • 简单类型如number、string、boolean、enum等。
    • 可被JSON.stringify()和JSON.parse()重构的对象(成员方法不支持持久化)。
    • API12及以上支持Map、Set、Date类型,以及undefined和null、联合类型。
  2. 不允许的类型和值
    • 不支持嵌套对象(对象数组、对象属性为对象等),因框架无法检测其值变化,无法写回PersistentStorage。
  3. 性能相关限制
    • 持久化数据相对缓慢,应避免持久化大型数据集和经常变化的变量。建议持久化变量小于2kb,大量数据持久化会影响UI渲染性能,如需存储大量数据,建议使用数据库API。
  4. 调用时机限制
    • 持久化操作需在UI实例初始化成功(loadContent传入的回调被调用时)后才可调用,早于该时机调用会导致持久化失败。

三、使用场景

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

  1. 初始化PersistentStorage
    • 使用PersistentStorage.persistProp('aProp', 47);初始化属性。
  2. 在AppStorage获取对应属性
    • 可以通过AppStorage.get<number>('aProp');获取,或在组件内部使用@StorageLink('aProp') aProp: number = 48;定义双向绑定变量。
    • 新应用安装后首次启动运行时,会依次查询PersistentStorage本地文件和AppStorage中是否存在属性,若不存在则创建并初始化,然后将属性持久化。之后在组件中创建双向绑定变量时会使用AppStorage中的值。
    • 触发点击事件等改变绑定变量时,变化会同步到AppStorage,进而触发PersistentStorage将新值写入磁盘。后续启动应用时,会先从PersistentStorage查询值并写入AppStorage,组件中的绑定变量获取到相应值。

(二)在PersistentStorage之前访问AppStorage中的属性(反例)

  • 例如let aProp = AppStorage.setOrCreate('aProp', 47);PersistentStorage.persistProp('aProp', 48);这种调用顺序会导致问题。在非首次运行时,先执行AppStorage.setOrCreate('aProp', 47)会创建属性并写回PersistentStorage,导致之前存储的值丢失,然后PersistentStorage.persistProp('aProp', 48)会使用新创建的值。

(三)在PersistentStorage之后访问AppStorage中的属性

  • 开发者可先判断是否需要覆盖上一次保存在PersistentStorage中的值,如PersistentStorage.persistProp('aProp', 48);if (AppStorage.get('aProp') > 50) { AppStorage.setOrCreate('aProp',47); },根据判断结果决定是否调用AppStorage接口修改值。

(四)支持联合类型

  • 例如PersistentStorage.persistProp("P", undefined);初始化属性为undefined,然后在组件中通过@StorageLink("P") p: number | undefined | null = 10;绑定变量,点击按钮改变变量值时,视图会刷新且值被持久化存储。

(五)装饰Date类型变量

  • 使用PersistentStorage.persistProp("persistedDate", new Date());初始化Date类型属性,在组件中通过@StorageLink("persistedDate") persistedDate: Date = new Date();绑定变量,点击按钮更新Date值时,视图刷新且值被持久化存储,可通过相关接口获取Date的具体信息(如年月日、时间等)并显示。

(六)装饰Map类型变量

  • PersistentStorage.persistProp("persistedMapString", new Map<number, string>([]));初始化Map类型属性,组件中通过@StorageLink("persistedMapString") persistedMapString: Map<number, string> = new Map<number, string>([]);绑定变量,点击按钮改变Map值(如添加键值对)时,视图刷新且值被持久化存储,可通过循环遍历显示Map中的元素。

(七)装饰Set类型变量

  • PersistentStorage.persistProp("persistedSet", new Set<number>([]));初始化Set类型属性,组件中通过@StorageLink("persistedSet") persistedSet: Set<number> = new Set<number>([]);绑定变量,点击按钮改变Set值(如添加元素、清空集合)时,视图刷新且值被持久化存储,可通过循环遍历显示Set中的元素。

标签:AppStorage,持久,鸿蒙,Next,persistProp,PersistentStorage,属性,aProp
From: https://www.cnblogs.com/freerain/p/18601636

相关文章

  • 鸿蒙里面编译时用到的hb是啥?
    hb是啥工具?当时看鸿蒙的编译文档,里面直接出来了hb命令,把我都看傻了。后来才知道:hb是HarmonyOS2.0里新增加的编译构建命令行工具。需要Python3.7.4及以上版本的支持,建议安装3.8.x。源码在OpenHarmony\build\lite\hb这个目录下。安装安装方法,可以直接使用pip安装打包好的工......
  • 手把手教你华为鸿蒙开发之第十二节
    华为鸿蒙开发:深入掌握TypeScript接口、类和泛型引言在现代软件开发中,TypeScript提供的接口(Interfaces)、类(Classes)和泛型(Generics)是构建可维护和可扩展代码的重要工具。华为鸿蒙操作系统的开发环境DevEcoStudio支持TypeScript,使得开发者可以利用这些特性来构建类型安全的......
  • 手把手教你华为鸿蒙开发之第十节
    华为鸿蒙开发:深入探索Tabs组件的定制与应用引言在移动应用设计中,标签页(Tabs)是用户切换不同内容区块的重要界面元素。华为鸿蒙操作系统提供的Tabs组件支持开发者创建高度定制化的标签页界面。本文将通过DevEcoStudio详细介绍Tabs组件的使用,包括基本设置、动态生成标签页、以及......
  • Abp-VNext用户权限管理系列文章09---集成webservice
    1、dBridge.WmsService.Host、Bridge.Wms.HttpApi中引用soapcore 2、WmsServiceHostModule中注入服务ConfigureServices方法中//注入WebServicecontext.Services.AddSoapCore(); OnApplicationInitialization方法中app.UseSoapEndpoint<IOrderWebService>("/Orde......
  • 鸿蒙 Next 中 Provide 和 Consume 的用法总结
    一、概述在鸿蒙Next中,@Provide和@Consume装饰器用于在祖先组件与后代组件之间实现双向数据同步,适用于状态数据在多个层级之间传递的场景,摆脱了父子组件间命名参数传递机制的束缚。从APIversion9开始,这两个装饰器支持在ArkTS卡片中使用,从APIversion11开始,支持在元服务中使用。......
  • 鸿蒙 Next 中 Prop 的用法详解
    一、@Prop概述在鸿蒙Next中,@Prop装饰器用于在父子组件之间建立单向的数据同步关系。这意味着数据从父组件流向子组件,子组件对@Prop装饰变量的修改不会同步回父组件。从APIversion9开始,该装饰器支持在ArkTS卡片中使用,从APIversion11开始,支持在元服务中使用。(一)同步机制父组......
  • 鸿蒙原生开发环境的创新与性能优化:从工具到跨平台支持的全方位提升
    鸿蒙原生开发环境的创新与性能优化:从工具到跨平台支持的全方位提升一、引言随着鸿蒙操作系统的不断发展,开发者对开发工具的要求也在逐渐提高。高效、智能的开发工具不仅能够帮助开发者快速实现创意,还能在开发过程中提供更好的支持和体验。本文将深入探讨鸿蒙原生开发中的......
  • 同一套RN代码,运行在原生鸿蒙端结果不一样?
    一、创作背景我最近开发鸿蒙的时候碰到一个很奇怪的问题,在这里给大家分享一下。如果后面大家也碰到类似的问题,可以作为修改参考。二、问题描述RN鸿蒙端开发的时候,可能碰到调试时和正式发版时展示效果不一致的情况。我这里有一段最简单的JS代码,只有一个View和一个Text,具体代码......
  • OpenHarmony默认30秒熄屏太麻烦?触觉智能鸿蒙开发板教你轻松取消
    开发板在默认情况下,OpenHarmony系统开机后30秒会自动息屏,自动息屏会让不少用户感到麻烦,触觉智能教大家两招轻松取消自动息屏。使用触觉智能PurplePiOH鸿蒙开发板演示,搭载了瑞芯微RK3566四核处理器,Laval鸿蒙社区推荐开发板,已适配全新OpenHarmony5.0Release系统,SDK源码全开放!S......
  • 【鸿蒙开发基础】@Styles修饰符
    1.@Styles修饰符是什么?@Styles修饰符用于保存公共属性,公共属性就是给每一个组件都可以设置的属性,比如宽度和高度,或者圆角设置,有些是特殊属性,只能给特定的组件进行设置,比如Text()可以设置的特殊属性有fontStyle和fontWeight。在Row()组件中就无法设置这两个属性,这是Text()所特......