HarmonyOS NEXT 实战系列07-应用状态

简介: AppStorage 是应用全局的 UI 状态存储,支持跨 Ability 数据共享,提供 `setOrCreate` 和 `get` 方法管理全局状态,并通过 `@StorageProp` 和 `@StorageLink` 实现单向或双向数据同步至组件。PersistentStorage 基于 AppStorage,提供状态变量的持久化能力,可将选定属性保存到设备磁盘,但写操作同步执行,建议持久化数据小于 2KB,以避免影响 UI 渲染性能。相关持久化文件位于 `/data/app/el2/.../persistent_storage` 目录下。
  1. 应用状态-AppStorage
    AppStorage 是应用全局的UI状态存储,不同于 @State 等装饰器仅能在组件树上传递,AppStorage的目的是为了给开发者提供更大范围的跨 Ability 基本的数据共享。

设置或创建全局UI状态 setOrCreate(propName: string, newValue: T): void
interface User {
name: string
age: number
}

AppStorage.setOrCreate('user', { name: 'jack', age: 18 })
获取全局UI状态 get(propName: string): T | undefined
const user = AppStorage.get('user')
@StorageProp(key) 全局UI状态单向数据同步至组件
@StorageProp('user')
user: User = {
name: '',
age: 0
}
@StorageLink(key) 全局UI状态双向数据同步至组件
@StorageLink('user')
user: User = {
name: '',
age: 0
}

  1. 应用状态-持久化
    PersistentStorage 提供状态变量持久化的能力,但是需要注意,其持久化和读回UI的能力都需要依赖AppStorage。PersistentStorage 将选定的 AppStorage 属性保留在设备磁盘上。

初始化在页面加载完成后进行

interface User {
name: string
age: number
}

PersistentStorage.persistProp('user', { name: '', age: 0 })
其持久化和读回UI的能力都需要依赖 AppStorage

设置全局UI状态 set(propName: string, newValue: T): boolean
AppStorage.set('user', { name: 'Jack', age: 18 })
获取全局UI状态 get(propName: string): T | undefined
const user = AppStorage.get('user')
@StorageProp(key) 全局UI状态单向数据同步至组件
@StorageProp('user')
user: User = {
name: '',
age: 0
}
@StorageLink(key) 全局UI状态双向数据同步至组件
@StorageLink('user')
user: User = {
name: '',
age: 0
}
持久化文件:

启动模拟器运行应用后,打开编辑器右下角 Device File Browser 查看
目录 /data/app/el2/100/base/包名/haps/entry/files/persistent_storage

注意:

PersistentStorage的持久化变量最好是小于2kb的数据,不要大量的数据持久化,因为PersistentStorage写入磁盘的操作是同步的,大量的数据本地化读写会同步在UI线程中执行,影响UI渲染性能。
————————————————

                        版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/zsgzsgzsgzsgzsg/article/details/146198772

相关文章
|
13天前
|
人工智能 JavaScript API
【HarmonyOS NEXT+AI】问答03:找不到DevEco Studio Cangjie Plugin下载链接?
本文针对学员在“HarmonyOS NEXT+AI大模型打造智能助手APP(仓颉版)”课程中提出的问题进行解答:为何无法在华为开发者社区官网找到DevEco Studio Cangjie Plugin下载链接。文中详细介绍了Cangjie Plugin的功能及获取方式,包括STS和Canary版本的申请流程,并提供了学习仓颉编程语言的资源与建议。对于普通开发者,STS版本是当前首选;同时,通过课程与官方教程,可快速掌握仓颉语言核心语法及API,助力开发HarmonyOS NEXT AI智能助手应用。
38 3
【HarmonyOS NEXT+AI】问答03:找不到DevEco Studio Cangjie Plugin下载链接?
|
3天前
|
安全 Linux 测试技术
对鸿蒙 Next 系统“成熟论”的深度剖析-优雅草卓伊凡
对鸿蒙 Next 系统“成熟论”的深度剖析-优雅草卓伊凡
33 10
对鸿蒙 Next 系统“成熟论”的深度剖析-优雅草卓伊凡
|
3天前
|
人工智能 安全 物联网
解析 OpenHarmony、HarmonyOS 与 HarmonyOS Next:优雅草卓伊凡的观点
解析 OpenHarmony、HarmonyOS 与 HarmonyOS Next:优雅草卓伊凡的观点
35 4
解析 OpenHarmony、HarmonyOS 与 HarmonyOS Next:优雅草卓伊凡的观点
|
3天前
|
人工智能 JavaScript 前端开发
【HarmonyOS NEXT+AI】问答04:仓颉编程语言适合毕业设计吗?
本文探讨了仓颉编程语言是否适合用于毕业设计的问题。仓颉编程语言虽小众,但具备独特性与创新性,可开发鸿蒙应用及AI大模型应用,具有前瞻性。其语法与主流语言类似,易于上手,且有丰富课程支持学习。若时间充裕并结合相关主题,使用仓颉语言能让毕业设计在答辩中脱颖而出。同时,文章还介绍了毕业设计答辩的时间安排,帮助学生合理规划。
21 3
【HarmonyOS NEXT+AI】问答04:仓颉编程语言适合毕业设计吗?
|
1天前
|
网络协议 Java 开发工具
全平台开源即时通讯IM框架MobileIMSDK:7端+TCP/UDP/WebSocket协议,鸿蒙NEXT端已发布,5.7K Stars
全平台开源即时通讯IM框架MobileIMSDK:7端+TCP/UDP/WebSocket协议,鸿蒙NEXT端已发布,5.7K Stars
17 1
|
30天前
|
存储 SQL 关系型数据库
HarmonyOS NEXT - RelationalStore关系型数据库
关系型数据库对应用提供通用的操作接口,底层使用SQLite作为持久化存储引擎,支持SQLite具有的数据库特性,包括但不限于事务、索引、视图、触发器、外键、参数化查询和预编译SQL语句。
94 27
|
21天前
|
存储 安全 算法
鸿蒙NEXT如何保证应用安全:详解鸿蒙NEXT数字签名和证书机制
本文对鸿蒙NEXT公开资料进行了深入分析和解读,梳理了鸿蒙单框架应用的签名机制,拆解每一步的实操过程和背后的实现原理,并对源码分析整理签名的校验机制。从中管中窥豹,探究鸿蒙系统的安全设计思路,给从事鸿蒙研发的同学提供一些借鉴。
99 3
|
19天前
|
缓存 开发工具 开发者
鸿蒙NEXT开发App相关工具类(ArkTs)
这段代码展示了一个名为鸿蒙NEXT开发 `AppUtil` 的工具类,主要用于管理鸿蒙应用的上下文、窗口、状态栏、导航栏等配置。它提供了多种功能,例如设置灰阶模式、颜色模式、字体类型、屏幕亮度、窗口属性等,并支持获取应用包信息(如版本号、包名等)。该工具类需在 UIAbility 的 `onWindowStageCreate` 方法中初始化,以便缓存全局变量。代码由鸿蒙布道师编写,适用于鸿蒙系统应用开发,帮助开发者更便捷地管理和配置应用界面及系统属性。
|
7天前
|
安全 前端开发 Android开发
拥抱国产化:转转APP的鸿蒙NEXT端开发尝鲜之旅
本文将要分享的是转转APP在开发全新鸿蒙NEXT端所遇到的一些问题,对比了鸿蒙开发和 Android、iOS 的不同,总结了这次开发过程中的一些经验等等。希望能带给你启发。
21 0
|
15天前
|
前端开发 API 开发工具
一年撸完百万行代码,企业微信的全新鸿蒙NEXT客户端架构演进之路
本文将要分享的是企业微信的鸿蒙Next客户端架构的演进过程,面对代码移植和API不稳定的挑战,提出了DataList框架解决方案。通过结构化、动态和认知三重熵减机制,将业务逻辑与UI解耦,实现数据驱动开发。采用MVDM分层架构(业务实体层、逻辑层、UI数据层、表示层),屏蔽系统差异,确保业务代码稳定。
78 0