鸿蒙面试的一些可能问到的点

news2024/11/25 4:24:28
页面跳转
router

鸿蒙中跳转主要有两种,一种是router,一种是Navigation,官方推荐使用Navigation。

Router适用于模块间与模块内页面切换,通过每个页面的url实现模块间解耦。模块内页面跳转时,为了实现更好的转场动效场景不建议使用该模块,推荐使用Navigation。

Router模块提供了两种跳转模式,分别是router.pushUrl()和router.replaceUrl()。这两种模式决定了目标页面是否会替换当前页。

  • router.pushUrl():目标页面不会替换当前页,而是压入页面栈。这样可以保留当前页的状态,并且可以通过返回键或者调用router.back()方法返回到当前页。

  • router.replaceUrl():目标页面会替换当前页,并销毁当前页。这样可以释放当前页的资源,并且无法返回到当前页。

页面栈的最大容量为32个页面。如果超过这个限制,可以调用router.clear()方法清空历史页面栈,释放内存空间。

同时,Router模块提供了两种实例模式,分别是Standard和Single。这两种模式决定了目标url是否会对应多个实例。

  • Standard:多实例模式,也是默认情况下的跳转模式。目标页面会被添加到页面栈顶,无论栈中是否存在相同url的页面。

  • Single:单实例模式。如果目标页面的url已经存在于页面栈中,则会将离栈顶最近的同url页面移动到栈顶,该页面成为新建页。如果目标页面的url在页面栈中不存在同url页面,则按照默认的多实例模式进行跳转。

组件导航 (Navigation)

Navigation是路由容器组件,一般作为首页的根容器,包括单栏(Stack)、分栏(Split)和自适应(Auto)三种显示模式。Navigation组件适用于模块内和跨模块的路由切换,一次开发,多端部署场景。通过组件级路由能力实现更加自然流畅的转场体验,并提供多种标题栏样式来呈现更好的标题和内容联动效果。在不同尺寸的设备上,Navigation组件能够自适应显示大小,自动切换分栏展示效果。

Navigation组件主要包含​导航页(NavBar)和子页(NavDestination)。导航页由标题栏(Titlebar,包含菜单栏menu)、内容区(Navigation子组件)和工具栏(Toolbar)组成,其中导航页可以通过hideNavBar属性进行隐藏,导航页不存在页面栈中,导航页和子页,以及子页之间可以通过路由操作进行切换。

在API Version 9上,需要配合NavRouter组件实现页面路由,从API Version 10开始,推荐使用NavPathStack实现页面路由。

生命周期

生命周期大致可分为三类,自定义组件生命周期、通用组件生命周期和自有生命周期(其中aboutToAppear和aboutToDisappear是自定义组件的生命周期。如果NavDestination外层包含自定义组件时则存在;OnAppear和OnDisappear是组件的通用生命周期。

route的@Entry的生命周期

Navigation生命周期

冷启动与热启动

uiability首次启动为冷启动,非首次为热启动

冷启动为onCreate()→onWindowStageCreate()→onForeground()

热启动为onNewWant()→onForeground()

布局性能优化

布局时应尽量减少总节点数,减少性能消耗

方向

1,移除冗余的节点

2,使用扁平化布局减少节点数

具体内容:

移除多余的外层线性布局

切换不同的布局类型实现扁平化

合理控制元素的显示隐藏

设置固定宽高减少measure的耗时(未设置和百分比宽高性能消耗较大)

仅在必要环境下使用高性能布局

长列表加载性能优化

主要分为四种

懒加载(10000条数据以上时建议使用layz)

缓存列表项(额外缓存部分列表项,一般为页面数据显示条数/2)

组件复用(减少组件创建的耗时操作@Reusable,aboutToReuse)

布局优化(相对布局,控制布局在5-8层)

webview的使用与传参

导入

import { webview } from '@kit.ArkWeb';

创建控制器

webController: webview.WebviewController = new webview.WebviewController();

再去build中选择本地的页面or网络中的页面

Web({ src: $rawfile('index.html'), controller: controller })//本地

Web({ src: 'www.example.com', controller: this.controller })//网络

当网页中调用

function submitAgreement(){ confirm(agreeCheckbox.checked) }

时,回调原生的onConfirm方法。

.onConfirm((event) => { return true; })

带的参数可以通过event.message获取

用户首选项

导入模块:

import { preferences } from '@kit.ArkData';

创建存储的名字:

options: preferences.Options = { name: 'agreementPG' };

创建操作的对象:

dataPreferences: preferences.Preferences = preferences.getPreferencesSync(getContext(), this.options);

存入数据(保存在内存当中,退出app数据重进会消失):

this.dataPreferences.putSync('agreement', 'true');

持久化存储(保存在内存当中,退出app数据重进不会消失): this.dataPreferences.flush();

读取数据:

this.dataPreferences.getSync('agreement', 'false')

异步编程

ArkTS 支持 Promise 和 async/await 语法,使得异步编程变得更加简洁明了。

async function fetchData(url: string): Promise {   let response = await fetch(url);   let data = await response.json();   return data; }

fetchData('https://api.example.com/data')   .then(data => console.log(data))   .catch(error => console.error(error));

常用装饰器
@Entry

表示页面的入口,装饰struct

@Component

装饰struct,表示具有基于组件的能力,保证内部包含一个且只能包含一个build()函数,用于绘制UI界面

@State

来装饰变量的装饰器( 其实就是用于定义变量 ),必须本地初始化数据, 支持通过构造函数赋值,当State值修改,所在build方法会被重新调用

@Prop

继承@State的功能,定义时不需要本地直接初始化,调用子组件时需要对其进行赋值,被修饰的变量建立和父组件单向同步关系,@Prop可变但不会传回父组件,父组件变化@Prop被覆盖

@Link

@Link 装饰的变量和父组件会构建双向同步关系,子组件使用 @Link 定义变量的时候不需要赋值, 而是调用子组件的时候进行赋值,调用子组件赋值的时候使用 "$变量名" 的形式进行赋值,@Link 装饰器不能再 @Entry 装饰的自定义组件中使用。

@Provide 和 @Consume

如果层级过高的话, 在父子组件之间进行数据传递的话, @State/@Link使用起来就比较麻烦,我们可以使用 @Provide 和 @Consume 进行跨组件数据传递。

使用发布订阅模式, 父类使用 @Provide, 其他需要观察的子类使用 @Consume, 就可以实现双向绑定
当层级很深时, 不需要一层一层传递数据, 直接使用发布订阅进行监听就能实现相同的效果
@Provide 和 @Consume 可以通过相同的变量名或者相同的变量别名绑定, 但是变量类型必须相同
@Provide 必须设置初始值, @Consume 不可以设置默认初始值
@Provide 修饰的变量和 @Consume 修饰的变量可以是一对多的关系

@Watch

观察者装饰器,当监控的变量发生变化,函数触发

@Builder

@Builder 是 ArkUI 提供的一种更加轻量的复用机制
因为在 @Component 内能且只能创建一个 build() 函数
我们可以在组件内利用 @Builder 装饰器自定义一个构建函数
@Builder 创建的构建函数遵循 build() 函数的语法规则, 并且可以在 build() 函数内调用

@Styles

样式的复用

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

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

相关文章

7.2-I2C的DMA中断

I2C的DMA中断 请先阅读完I2C的普通中断模式以后再阅读本教程 i2c的DMA模式 1.添加通道 ,添加后的参数保持默认 2.可以看到自动给我们DMA添加了中断向量。 保存后只需要将下面_ IT改为_ DMA即可 运行代码 i2c1) { aht20State 4; } } /* USER CODE END 0 */ 以上就…

ssm基于java的网上手机销售系统

系统包含:源码论文 所用技术:SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习,获取源码请私聊我 需要定制请私聊 目 录 目 录 III 1 绪论 1 1.1 研究背景 1 1.2 目的和意义 1 1.3 论文结构安排 2 2 相关技术 3 2.1 SSM框…

yolov5环境GPU搭建 ,用GPU跑polov5算法

win10NVIDIA GeForce RTX 3050torch1.13.1torchaudio0.13.1torchvision 0.14.1 cuda11.7python3.8cudnn8.7.0 在环境搭建中踩了许多坑,yolov5环境的搭建需要依赖很多环境,用cpu跑很容易跑单张识别,用GPU跑却踩了很多坑,不过GPU环…

Mac 备忘录妙用

之前使用 Windows 的过程中,最痛苦的事是没有一款可以满足我快速进行记录的应用 基本都得先打开该笔记软件,然后创建新笔记,最后才能输入,这么多步骤太麻烦了 在切换到 MacOS 之后,让我惊喜的就是自带的备忘录&#…

【java面经thinking】一

目录 类加载过程 加载: 连接 初始化 GC回收机制(垃圾回收) 区域 判断对象是否存活 回收机制 HashMap 类加载器 加载标识 加载机制 缓存 自定义加载器: JVM内存结构 常量池 string设置成final 按下网址发生 类加…

C语言有关结构体的知识(后有通讯录的实现)

一、结构体的声明 1.1 结构体的定义 结构体是一些值的集合,这些值被称为成员变量。结构的每个成员可以是不同的类型 1.2 结构体的声明 这里以描述一个学生为例: struct stu {char name[10];//名字int age;//年龄char id[20];//学号char sex[5];//性别 }…

TIM定时器(标准库)

目录 一. 前言 二. 定时器的框图 三. 定时中断的基本结构 四. TIM定时器相关代码 五. 最终现象展示 一. 前言 什么是定时器? 定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断。 TIM定时器不仅具备基本的定时中断功能,而且…

【LeetCode】708. 循环有序列表的插入

目录 一、题目二、解法完整代码 一、题目 给定循环单调非递减列表中的一个点,写一个函数向这个列表中插入一个新元素 insertVal ,使这个列表仍然是循环非降序的。 给定的可以是这个列表中任意一个顶点的指针,并不一定是这个列表中最小元素的…

2024免费mac苹果电脑清理垃圾软件CleanMyMac X4.15.8

对于苹果电脑用户来说,设备上积累的垃圾文件可能会导致存储空间变得紧张,影响电脑的性能和使用体验。尤其是那些经常下载和安装新应用、编辑视频或处理大量照片的用户,更容易感受到存储空间的压力。面对这种情况,寻找一种有效的苹…

springboot3使用Excel导入数据库数据

一、导入依赖 <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.3.0</version></dependency> 二、…

Xilinx远程固件升级(二)——STARTUPE2原语的使用

通过&#xff08;一&#xff09;可以看出&#xff0c;对于远程固件升级实际上是通过调用flash不同区域的bit实现&#xff0c;通过golden image和update image共同保障了系统的稳定性。在项目中如果将flash的时钟直接绑定FPGA后进行约束&#xff0c;在综合编译时是无法通过的。这…

Spark:DataFrame介绍及使用

1. DataFrame详解 DataFrame是基于RDD进行封装的结构化数据类型&#xff0c;增加了schema元数据&#xff0c;最终DataFrame类型在计算时&#xff0c;还是转为rdd计算。DataFrame的结构化数据有Row&#xff08;行数据&#xff09;和schema元数据构成。 Row 类型 表示一行数据 …

MySQL 8.4修改初始化后的默认密码

MySQL 8.4修改初始化后的默认密码 &#xff08;1&#xff09;初始化mysql&#xff1a; mysqld --initialize --console &#xff08;2&#xff09;之后,mysql会生成一个默认复杂的密码&#xff0c;如果打算修改这个密码&#xff0c;可以先用旧密码登录&#xff1a; mysql -u…

Redis set类型 zset类型

set类型 类型介绍 集合类型也是保存多个字符串类型的元素的&#xff0c;但和列表类型不同的是&#xff0c;集合中 1&#xff09;元素之间是⽆序 的 2&#xff09;元素不允许重复 ⼀个集合中最多可以存储 个元素。Redis 除了⽀持 集合内的增删查改操作&#xff0c;同时还⽀持多…

【图书推荐】《R语言医学数据分析实践》

本书重点 梅俏、卢龙、丁健、张晟、黄龙、胡志坚、张琼瑶、林志刚等业内专家联袂推荐。 以公共医学数据为例&#xff0c;精选大量的实用案例&#xff0c;深入浅出地介绍统计建模分析方法。 帮助读者解决医学数据分析中遇到的实际问题。 通过实际操作引导读者入门科研论文数…

生信分析流程:从数据准备到结果解释的完整指南

介绍 生物信息学&#xff08;生信&#xff09;分析是一个复杂的过程&#xff0c;涉及从数据准备到结果解释的多个步骤。随着高通量测序技术的发展和生物数据的迅猛增长&#xff0c;了解和掌握生信分析的标准流程变得尤为重要。这不仅有助于提高分析的准确性&#xff0c;还能优…

HarmonyOS NEXT 应用开发实战(五、页面的生命周期及使用介绍)

HarmonyOS NEXT是华为推出的最新操作系统&#xff0c;arkUI是其提供的用户界面框架。arkUI的页面生命周期管理对于开发者来说非常重要&#xff0c;因为它涉及到页面的创建、显示、隐藏、销毁等各个阶段。以下是arkUI页面生命周期的介绍及使用举例。 页面的生命周期的作用 页面…

7-I2C与AHT20温湿度传感器

I2C与AHT20温湿度传感器 嵌入式领域另一种常见的通信IIC通信&#xff0c;并用其与AHT20传感器进行交互&#xff0c;获取房间的温度与湿度。 I2C有一条用于传递数据的数据线称为SDA&#xff08;Serial Data&#xff09;&#xff0c;另一条是用于提供同步时钟脉冲的时钟线SCL&am…

看图识微分与导数概念。

可建立如草图所示的局部坐标系。增量Δydy余项是草图中曲线的方程&#xff0c;微分dyydx&#xff08;是关于dx的一次函数&#xff09;是草图中切线的方程。草图形象直观地显示曲线Δy不切线dy。

安全可靠测评结果公告(2024年第1号)

大家可以选择对应的数据库&#xff0c;中央处理器&#xff0c;供参考&#xff1b;尤其是 水资源安可系统 智慧农业安可系统 智慧水利安可系统、智慧水务安可系统&#xff0c;企业安可系统 等参考使用