持久化存储与设备环境查询的最佳实践

news2024/11/16 13:24:07

ArkUI框架中的PersistentStorage和Environment

在ArkUI框架中,持久化存储和设备环境查询是应用开发中不可或缺的两个重要功能。在本文中,我们将深入了解框架提供的PersistentStorage和Environment,它们的用途、限制条件以及在应用开发中的使用场景。

PersistentStorage:保持状态的长存储

概述

PersistentStorage是ArkUI框架中的可选单例对象,用于持久化存储选定的AppStorage属性。这确保了在应用程序重新启动时,这些属性的值与应用程序关闭时保持一致。

限制条件

  • 允许的类型和值包括 number、string、boolean、enum等简单类型,以及可以被JSON.stringify()和JSON.parse()重构的对象。
  • 不支持嵌套对象和undefined、null。
  • 持久化数据操作相对较慢,应避免持久化大型数据集和经常变化的变量。

使用场景

在这里插入图片描述

初始化和访问属性
// 初始化PersistentStorage
PersistentStorage.PersistProp('aProp', 47);

// 在AppStorage获取对应属性
AppStorage.Get('aProp'); // 返回 47

// 在组件内部定义双向绑定
@StorageLink('aProp') aProp: number = 48;

示例流程图

在这里插入图片描述

注意事项

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

Environment:设备环境查询

使用场景

从UI中访问Environment参数
// 将设备的语言code存入AppStorage中,默认值为en
Environment.EnvProp('languageCode', 'en');

// 使用@StorageProp链接到Component中
@StorageProp('languageCode') lang: string = 'en';
应用逻辑使用Environment
// 将设备languageCode存入AppStorage中
Environment.EnvProp('languageCode', 'en');

// 从AppStorage获取单向绑定的languageCode的变量
const lang: SubscribedAbstractProperty<string> = AppStorage.Prop('languageCode');

if (lang.get() === 'zh') {
  console.info('你好');
} else {
  console.info('Hello!');
}

在以上示例中,我们深入了解了PersistentStorage和Environment的使用方法、限制条件以及在应用开发中的实际应用场景。这两个功能为开发人员提供了有效的工具,以确保应用状态的持久性和对设备环境的灵活适应性。在ArkUI框架中,这两者的结合为开发者提供了更便捷的状态管理和设备环境查询的方式。

深入ArkUI框架的持久化存储与设备环境查询

在前文中,我们深入了解了ArkUI框架中的PersistentStorage和Environment的基本概念、使用场景以及限制条件。接下来,我们将进一步探讨这两个功能的重要性以及如何在应用程序开发中更加灵活地利用它们。

持久化存储的重要性

数据的长期保存

PersistentStorage充当了应用程序状态的守护者,确保在应用退出再次启动后,用户选择的状态和数据得以保留。这对于用户体验至关重要,用户不必在每次应用启动时重新设置首选项或重新输入信息。

双向同步与流畅体验

通过与AppStorage的双向同步,PersistentStorage实现了数据的自动更新和持久化。这种无缝的数据同步确保了在应用的各个部分中,无论是UI还是业务逻辑,都能够访问到最新的数据状态,为用户提供流畅一致的体验。

避免性能问题与限制条件

然而,开发者需要注意的是,PersistentStorage并不适合持久化大型数据集或经常变化的变量。由于持久化是一个相对较慢的操作,大量的数据本地化读写可能会影响UI渲染性能。在这种情况下,建议使用数据库API来存储大量数据。

设备环境查询的灵活运用

多语言支持

Environment提供了查询设备语言的便捷方式,使得应用可以根据设备的语言设置调整显示内容。通过在AppStorage中存储语言设置,开发者可以轻松实现多语言支持,提升应用的国际化水平。

// 将设备的语言code存入AppStorage中,默认值为en
Environment.EnvProp('languageCode', 'en');

// 使用@StorageProp链接到Component中
@StorageProp('languageCode') lang: string = 'en';

适应暗黑模式等环境参数

通过Environment,开发者可以获取设备的各种环境参数,如是否启用了暗黑模式。这为应用提供了更高的灵活性,可以根据用户的偏好调整界面风格,提供更加个性化的体验。

// 将是否启用暗黑模式存入AppStorage中
Environment.EnvProp('darkMode', false);

// 使用@StorageProp链接到Component中
@StorageProp('darkMode') isDarkMode: boolean = false;

ArkUI框架中的持久化存储与设备环境查询最佳实践

在前文的基础上,我们将深入探讨ArkUI框架中PersistentStorage和Environment的一些高级用法和最佳实践,以帮助开发者更好地利用这两个关键功能。

持久化存储最佳实践

数据结构选择

由于PersistentStorage不支持嵌套对象,对于复杂的数据结构,建议拆分为多个独立的属性进行存储。这有助于避免数据同步和更新的复杂性。

// 不推荐
PersistentStorage.PersistProp('user', { name: 'John', age: 30 });

// 推荐
PersistentStorage.PersistProp('userName', 'John');
PersistentStorage.PersistProp('userAge', 30);

避免频繁持久化

持久化操作相对较慢,因此应避免对大型数据集或频繁变化的变量进行过度持久化。在这种情况下,考虑使用其他本地存储方案,如数据库API。

设备环境查询最佳实践

灵活适应多环境

通过Environment获取设备环境参数时,考虑到不同设备和用户的使用习惯,确保应用能够灵活适应各种情境。例如,通过检测是否为平板设备,可以调整布局和界面以提供更好的用户体验。

const isTablet: boolean = Environment.isTablet;

动态主题切换

利用Environment中的设备环境参数,实现动态主题切换,使应用在不同环境下保持一致的外观。

// 将暗黑模式状态存入AppStorage中
Environment.EnvProp('darkMode', false);

// 使用@StorageProp链接到Component中
@StorageProp('darkMode') isDarkMode: boolean = false;

结语

ArkUI框架中的PersistentStorage和Environment为应用开发提供了强大的工具,但要充分发挥它们的优势,开发者需要在使用中谨慎权衡。通过选择合适的数据结构、避免频繁持久化操作以及充分利用设备环境参数,可以使应用在长时间运行中保持高效、流畅,并适应各种使用场景。这些最佳实践将有助于开发者更好地利用ArkUI框架的持久化存储与设备环境查询功能,提升应用的质量和用户体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1911920.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SDIO CMD 数据部分 CRC 计算规则

使用的在线 crc 计算工具网址&#xff1a;http://www.ip33.com/crc.html CMD CRC7 计算 如下图为使用逻辑分析仪获取的SDIO读写SD卡时&#xff0c;CMD16指令发送的格式&#xff0c;通过逻辑分析仪总线分析&#xff0c;可以看到&#xff0c;该部分的CRC7校验值得0x05,大多数情况…

二战架构师,拿下

前言 已经许久更新文章了&#xff0c;并不是因为我懒了&#xff0c;而是在备考系统架构师考试。个人感觉还是比较幸运的&#xff0c;低分飘过。现阶段任务也算完成了&#xff0c;记录一下感受。 什么是软考 软考&#xff0c;全称“计算机技术与软件专业技术资格&#xff08…

Agent如何帮助大模型“增强记忆”?

Agent如何帮助大模型“增强记忆”&#xff1f; 原创 格林 神州问学 2024年07月08日 17:50 日本 记忆反馈 >规划&#xff1f; 来源|神州问学 引言 去年6月份&#xff0c;Lilian发布了关于LLM驱动的Agent的结构和组件&#xff0c;其中包括规划、行动、工具还有记忆&#xff…

去除Win32 Tab Control控件每个选项卡上的深色对话框背景

一般情况下&#xff0c;我们是用不带边框的对话框来充当Tab Control的每个选项卡的内容的。 例如&#xff0c;主对话框IDD_TABBOX上有一个Tab Control&#xff0c;上面有两个选项卡&#xff0c;第一个选项卡用的是IDD_DIALOG1充当内容&#xff0c;第二个用的则是IDD_DIALOG2。I…

C++相关概念和易错语法(17)(适配器模式、仿函数)

1.stack和queue stack和queue的相关接口如下&#xff1a; stack queue 我们发现不管是stack还是queue&#xff0c;它们都有push和pop&#xff0c;不区分push_back和push_front&#xff0c;这是由它们的入栈特定顺序特性决定的&#xff0c;并且它们都没有迭代器&#xff0c;st…

【系统架构设计】计算机组成与体系结构(一)

计算机组成与体系结构 计算机系统组成计算机硬件组成控制器运算器主存储器辅助存储器输入设备输出设备 计算机系统结构的分类存储程序的概念Flynn分类 复杂指令集系统与精简指令集系统总线 存储器系统流水线 兜兜转转&#xff0c;最后还是回到了4大件&#xff0c;补基础&#x…

【力扣】数组中的第K个最大元素

一、题目描述 给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 k 个最大的元素。 请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1: 输入: [3,2,1,5,…

图片像素坐标转实际坐标的一种转换方案

原图 红色的点是我们标注的像素点&#xff0c;这些红色的点我们知道它的像素坐标&#xff0c;以及以右下角相机位置为原点的x y 实际坐标数值 通过转换&#xff0c;可以得到整个图片内部其余像素点的实际坐标&#xff0c; 这些红色的点是通过转换关系生成的&#xff0c;每隔一米…

python破解密码·筛查和选择

破解密码时可能遇到的几种情况 ① 已知密码字符&#xff0c;破排序 ② 已知密码位数&#xff0c;破字符 ③ 已知密码类型&#xff0c;破字位 ④ 已知部分密码&#xff0c;破未知 ⑤ 啥都不知道&#xff0c;盲破&#xff0c;玩完 ⑥ 已知位数、字符、类型、部分密码中的几个&am…

2024全网最全面及最新且最为详细的网络安全技巧五 之 SSRF 漏洞EXP技巧,典例分析以及 如何修复 (下册)———— 作者:LJS

五.SSRF 漏洞EXP技巧&#xff0c;典例分析以及 如何修复 (下册) 目录 五.SSRF 漏洞EXP技巧&#xff0c;典例分析以及 如何修复 (下册) 5.4gopher 协议初探 0x01 Gopher协议 0x02 协议访问学习 复现环境 centos7 kali 2018 发送http get请求 发送http post请求 5.5 SSRF…

☺初识c++(语法篇)☺

目录 一命名空间&#xff08;namespace&#xff09;&#xff1a; 二cout与cin简述&#xff1a; 三缺省参数&#xff1a; 四函数重载&#xff1a; 五引用&#xff1a; 六内联函数: 七c中的nullptr简述&#xff1a; 一命名空间&#xff08;namespace&#xff09;&#xff1…

Chromium编译指南2024 Linux篇-同步Chromium第三方库(四)

1.引言 在成功拉取Chromium源码并创建新分支后&#xff0c;我们需要进一步配置开发环境。这包括拉取必要的第三方库以及设置hooks&#xff0c;以确保我们能够顺利进行编译和开发工作。以下步骤将详细介绍如何进行这些配置。 2.拉取第三方库以及hooks Chromium 使用了大量的第…

2024第六届上海国际新材料展览会-12月精彩呈现

2024第六届上海国际新材料展览会 The 6th shanghai International New Materials Exhibition in 2024 时 间&#xff1a;2024年12月18-20日 地 点&#xff1a;上海新国际博览中心 CIME 2024专业、权威&#xff0c;涵盖整个新材料行业的国际盛会。 期待与您在CIME 2024现场相…

24-7-9-读书笔记(九)-《爱与生的苦恼》[德]叔本华 [译]金玲

文章目录 《爱与生的苦恼》阅读笔记记录总结 《爱与生的苦恼》 《爱与生的苦恼》叔本华大佬的名书&#xff0c;里面有其“臭名昭著”的《论女人》&#xff0c;抛开这篇其他的还是挺不错的&#xff0c;哲学我也是一知半解&#xff0c;这里看得也凭喜好&#xff0c;这里记录一些自…

大模型/NLP/算法面试题总结2——transformer流程//多头//clip//对比学习//对比学习损失函数

用语言介绍一下Transformer的整体流程 1. 输入嵌入&#xff08;Input Embedding&#xff09; 输入序列&#xff08;如句子中的单词&#xff09;首先通过嵌入层转化为高维度的向量表示。嵌入层的输出是一个矩阵&#xff0c;每一行对应一个输入单词的嵌入向量。 2. 位置编码&…

Qt 创建的窗口一闪而过【已解决】

Qt 创建的窗口一闪而过 引言一、详细的解决方案 - 附代码二、参考博文 引言 创建的窗口一闪而过&#xff0c;就是创建完立马被销毁了&#xff0c;常见情况是在一个函数中创建窗口并show() - 即创建在了栈上&#xff0c;函数结束局部变量(窗口)自动被释放。主流的解决方法有两种…

(HAL)stm32f407+freertos通过usb驱动移远4G模块-EC600U

概述 本篇文章主要介绍: 如何使用STM32CubeMX创建stm32F407+freertos+usb host的基础工程。USB-HOST-CDC驱动运行过程。如何根据4G模块的具体信息修改usb相关代码。MCU如何通过usb与4G模块通信,收发数据。调试过程中遇到的问题以及解决办法。 整个过程中在网上搜罗了很多参考…

机场的出租车问题折线图

分析并可视化机场离场车辆数数据 本文将详细介绍如何使用Python的正则表达式库re和绘图库matplotlib对机场离场车辆数数据进行分析和可视化。以下是具体步骤和代码实现。 数据资源&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rU-PRhrVSXq-8YdR6obc6Q?pwd1234 提…

干货:高水平论文写作思路与方法

前言:Hello大家好,我是小哥谈。高水平论文的写作需要扎实的研究基础和严谨的思维方式。同时,良好的写作技巧和时间管理也是成功的关键。本篇文章转载自行业领域专家所写的一篇文章,希望大家阅读后可以能够有所收获。🌈 目录 🚀1.依托事实/证据,通过合理的逻辑,…

每日刷题(二分查找,匈牙利算法,逆序对)

目录 1.Sarumans Army 2.Catch That Cow 3.Drying 4.P3386 【模板】二分图最大匹配 5. Swap Dilemma 1.Sarumans Army 3069 -- Sarumans Army (poj.org) 这道题就是要求我们在给的的位置放入 palantir&#xff0c;每个 palantir有R大小的射程范围&#xff0c;要求求出最少…