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

鸿蒙 管理应用拥有的状态有Localstorage、Appstorage、PersistentStorage、Environment、用户首选项、持久化方案。

LocalStorage:

LocalStorage是页面级UI状态存储,通过@Entry装饰器接收的参数可以在页面内共享同一个LocalStorage实例。支持UIAbility实例内多个页面间状态共享。

// 存储数据

localStorage.setItem('key', 'value');

// 获取数据

const value = localStorage.getItem('key');

// 删除数据

localStorage.removeItem('key');

LocalsStorage根据@Component装饰的组件的同步类型不同,提供了两个装饰器:
@LocalStorageProp:

@LocalStorageProp装饰的变量与LocalStorage中给定属性建立单向同步关系。

@LocalStorageLink:

@LocalStorageLink装饰的变量与LocalStorage中给定属性建立双向同步关系。

AppStorage:

AppStorage是应用全局的UI状态存储。是喝应用的进程绑定的,由UI框架在应用程序启动时创建,为应用程序UI状态属性提供中央存储。

和AppStroage不同的是,LocalStorage是页面级的,通常应用页面内的数据共享。而Appstorage是应用的全局状态共享,还相当于整个应用的"中枢",持久化数据PeresistentStorage和环境变量Environment都是通过AppStorage中转,才可以和UI交互。

// 存储数据

appStorage.set('key', 'value');

// 获取数据

appStorage.get('key')

.then(value => {

console.log(value);

});

// 删除数据

appStorage.delete('key');

AppStorage使用场景和相关的装饰器:@StorageProp和@StorageLink。
@StorageProp:

使用@StorageProp(key)/@StorageLink(key)装饰组件内的变量,key标识了AppStorage的属性。AppStorage不一定存在key对应的属性,因此@StorageProp(key)/@StorageLink(key)装饰的变量进行本地初始化是必要的。

@StorageProp(key)是和AppStorage中key对应的属性建立单向数据同步,允许本地改变,但是对于@StorageProp,本地的修改永远不会同步回AppStorage中,相反,如果AppStorage给定key的属性发生改变,改变会被同步给@StorageProp,并覆盖掉本地的修改。


@StorageLink:

@StorageLink(key)是和AppStorage中key对应的属性建立双向数据同步:

  1. 本地修改发生,该修改会被写回AppStorage中;

  2. AppStorage中的修改发生后,该修改会被同步到所有绑定AppStorage对应key的属性上,包括单向(@StorageProp和通过Prop创建的单向绑定变量)、双向(@StorageLink和通过Link创建的双向绑定变量)变量和其他实例(比如PersistentStorage)。

PersistentStorage:

PersistentStorage:持久化存储UI状态。

// 初始化数据库

const db = await persistentStorage.getDatabase('myDatabase');

// 插入数据

await db.insert('tableName', { key: 'value' });

// 查询数据

const result = await db.query('tableName', { key: 'value' });

// 删除数据

await db.delete('tableName', { key: 'value' });

作用是持久化存储选定的 AppStorage 属性

  • PersistentStorage的持久化变量最好是小于 2kb 的数据,不要大量的数据持久化。因为PersistentStorage写入磁盘的操作是同步的,大量的数据本地化读写会同步在UI线程中执行,影响UI渲染性能。
  • PersistentStorage和UI实例相关联,持久化操作需要在UI实例初始化成功后,才能使用。而且一个 属性 只能初始化一次。

Environment:

应用程序运行的设备的环境参数,环境参数会同步到AppStorage中,可以和AppStorage搭配使用。

// 获取设备信息

const deviceInfo = environment.getDeviceInfo();

// 获取系统设置

const systemSettings = environment.getSystemSettings();

用户首选项:

其实就是个 xml 本地文件,<string>你好</string>,value如果string类型,可以存 16MB 的数据,最多存 1w 条数据。

// 存储用户首选项

userPreferences.set('theme', 'dark');

// 获取用户首选项

const theme = userPreferences.get('theme');

// 删除用户首选项

userPreferences.remove('theme');

持久化方案--数据库(类似表格):

需要定义表格的标题,表格的每一项数据的类型,有一套专门的 API 对数据进行增删查改。单条数据有2M的限制,总条数理论上没限制。

总结:

在鸿蒙操作系统中,有多种方式可以管理应用的状态和数据存储。选择合适的方法取决于具体的应用场景和需求:

LocalStorage:适用于简单的键值对存储。
AppStorage:适用于需要持久化存储的小量数据。
PersistentStorage:适用于需要长期保存大量数据的场景。
Environment:用于访问系统环境变量和配置。
用户首选项:用于存储用户的个性化设置和偏好。
持久化方案:适用于需要存储大量数据或复杂数据结构的场景,如文件系统和 SQLite 数据库。


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

相关文章:

  • Springboot采用jasypt加密配置
  • 利用OpenAI进行测试需求分析——从电商网站需求到测试用例的生成
  • 一文说清C++类型转换操作符(cast operator)
  • 如何在uniapp中获取和修改Web项目的Cookie
  • SQL Server Service Broker完整示例
  • 【大数据测试 Hive数据库--保姆级教程】
  • react项目通过http调用后端springboot服务最简单示例
  • 如何在 Ubuntu 上安装 Emby 媒体服务器
  • 【人工智能】迁移学习在深度学习中的应用:用Python实现自定义数据集图像分类
  • 云原生之运维监控实践-使用Telegraf、Prometheus与Grafana实现对InfluxDB服务的监测
  • 【自学笔记】神经网络(2) -- 模型评估和优化
  • ArrayList 源码分析
  • 【鸿蒙开发】第十八章 Media媒体服务(一)
  • 37.超级简易的计算器 C语言
  • SpringBoot使用AspectJ的@Around注解实现AOP全局记录接口:请求日志、响应日志、异常日志
  • 打印1~N
  • PHP正则表达式
  • 【Java SE】lambda 表达式
  • 15分钟学 Go 第 56 天:架构设计基本原则
  • 浪潮服务器(BMC)监控易监测指标解读
  • 4399 C++面试题及参考答案
  • IT行业现状与未来趋势
  • SOL链上Meme生态的崛起与未来#Dapp开发#链游#交易所#公链搭建
  • 和 Nostr 探索 Web5 的未来
  • 卓越API设计:简洁统一开放规范
  • 【学习心得】数据分析三剑客跟学Gitee仓库