2024最新(API 12)鸿蒙开发面试题-HarmonyOS Next

文摘   2024-08-30 18:44   吉林  

1. Harmony OS App打包后的包名后缀是什么?

发布包:.hap

调试包:.hap.debug

预览包:.hap.preview

2. 页面和自定义组件生命周期有哪些?

页面和自定义组件生命周期说明(官网查看)

页面(有@Entry装饰器的component)的生命周期:

onPageShow:页面每次显示时触发一次,包括路由过程、应用进入前台等场景。

onPageHide:页面每次隐藏时触发一次,包括路由过程、应用进入后台等场景。

onBackPress:当用户点击返回按钮时触发。

自定义组件(由@Component装饰器修饰的component)的生命周期:

aboutToAppear:组件即将出现时回调该接口,具体时机为在创建自定义组件的新实例后,在执行其build()函数之前执行。

onDidBuild:API12新增,组件build()函数执行完成之后回调该接口,不建议在onDidBuild函数中更改状态变量、使用animateTo等功能,这会导致不稳定的UI表现。

aboutToDisappear:aboutToDisappear函数在自定义组件析构销毁之前执行。不允许在aboutToDisappear函数中改变状态变量,特别是@Link变量的修改会导致应用程序行为不稳定。

3. 如何进行数据持久化?

应用数据持久化(官网查看)

用户首选项(Preferences):这是一种轻量级的配置数据持久化方式,适用于保存应用配置信息、用户偏好设置等。它通过文本形式保存数据,并且数据会全量加载到内存中,因此访问速度快,但不适合存储大量数据。

键值型数据库(KV-Store):适用于存储结构简单的数据,如商品名称和价格、员工工号和出勤状态等。键值型数据库以“键值对”的形式组织数据,适合数据关系不复杂的场景。



关系型数据库(RelationalStore):基于SQLite,适用于存储包含复杂关系的数据,如学生信息、雇员信息等。关系型数据库提供了一系列SQL操作,如增删改查等。 

             

4. 如何进行全局状态管理?

应用全局的UI状态存储(官网查看)

@State装饰器:用于组件内部的状态数据,当状态数据被修改时,会触发组件的build()方法刷新UI。

@Prop装饰器:用于建立父子组件之间的单向数据绑定。

@StorageLink装饰器:用于与AppStorage建立双向数据绑定,实现数据的全局共享和持久化。

AppStorage:提供应用级别的状态管理,可以跨组件和页面共享状态数据。

PersistentStorage:与AppStorage配合使用,实现数据的持久化存储。

LocalStorage:页面级的UI状态存储,用于页面内或UIAbility内的状态共享。

Environment:提供应用程序运行环境的参数,可以与AppStorage搭配使用。

5. LocalStorage在应用重启后数据会消失吗?

页面级UI状态存储(官网查看)

会,因为LocalStorage 是一种用于页面或组件级别的数据存储方式,它允许开发者在页面或组件的生命周期内存储和检索数据。LocalStorage 的数据存储在内存中,因此它的读写速度相对较快。但是,当应用重启后,LocalStorage 中的数据会丢失。

6. 父子组件如何通信?

@Prop装饰器

@Link装饰器

@Provide和@Consume装饰器

@Event装饰器

@Parame装饰器、

@Provider装饰器和@Consumer装饰器

当前(API 12)状态管理有两个版本 V1 和 V2

V1版本:

父组件可以通过设置子组件的属性来传递数据。子组件通过定义 @Prop装饰器和 @Link装饰器修饰的变量来接收从父组件传递过来的属性值。

@Provide和 @Consume装饰器:本是用于跨组件通信,但父组件也可通过 @Provide装饰器提供数据,子组件通过 @Consume装饰器消费数据。

V2版本(开发中,不稳定)

@Param 装饰器:用于父组件向子组件传递数据,类似V1的 @Prop。

子组件通过 @Event装饰器装饰回调方法并调用,可以实现更改数据源的变量,再通过 @Local的同步机制,将修改同步回 @Param,以此达到主动更新 @Param装饰变量的效果。

使用 @Provider装饰器和 @Consumer装饰器,类似V2的 @Provide和 @Consume装饰器,具体区别见 27

7. 兄弟组件如何通信?

通过公共父组件传递:

如果两个组件是同一个父组件的子组件,可以通过父组件来传递数据或事件。父组件可以作为中介,将一个子组件的数据或事件传递给另一个子组件。

使用全局状态管理:

使用全局状态管理(如 AppStorage)来存储共享数据。兄弟组件可以独立地读取和更新这个全局状态,从而实现通信。

8. 如何实现页面间的通信?

页面间通信可以通过路由的方式实现,路由可以实现页面间的跳转,也可以实现页面间的数据传递。

9. Navigation组件跳转和router跳转有什么区别?

官方文档写了很多,捡几个我觉得比较重要的写的

Navigation:是路由容器组件,适用于模块内和跨模块的路由切换,一次开发,多端部署场景。Router位于页面栈管理节点 stage 下面,不提供导航容器的概念。

Navigation和 Router都支持跳转传参,但 Router对象中暂不支持方法变量。

Navigation:支持清理指定路由,页面栈没有上限,可以无限跳转。Router不支持清理指定路由且页面栈最大为32,页面栈到达32之后必须清除之后才能继续跳转。

Navigation:支持自定义转场动画和共享元素转场动画。Router:仅支持简单自定义转场动画。

Navigation:支持通过 setInterception 方法设置路由拦截。Router:不支持路由拦截。

Navigation:支持沉浸式页面和模态嵌套路由。Router:不支持,需要通过窗口配置实现沉浸式页面。

总而言之,Navigation 组件在功能上更具丰富性和灵活性,特别是在处理复杂的导航结构、动效和路由管理方面。

而 Router 则提供了更基础的路由跳转功能,适合简单的路由需求。开发者可以根据应用的具体需求和设计选择最合适的路由方案。

10. HarmonyOS与Android和iOS有什么区别?

HarmonyOS 是华为开发的一个开源、分布式的操作系统。它设计用于多种设备,包括智能手机、平板电脑、智能电视和物联网设备。与Android和iOS的主要区别在于:

分布式架构:鸿蒙OS支持跨设备无缝协作,允许设备之间共享硬件资源。

性能:鸿蒙OS优化了任务调度和内存管理,提高了性能和响应速度。

安全性:鸿蒙OS采用了多层次的安全策略,包括数据加密和安全启动。

生态系统:鸿蒙OS正在构建自己的应用生态系统,鼓励开发者使用Ark Ts和ArkUI框架。

11. 什么是Ability?

在HarmonyOS中,Ability是应用的基本组成单元和入口,类似于Android中的Activity或iOS中的ViewController。Ability分为两种类型:

FA(Feature Ability):提供独立功能的Ability,可以单独运行。

PA(Particle Ability):轻量级的Ability,通常与FA一起出现,用于实现特定的用户界面或交互。

12. ArkUI框架有哪些特点?

ArkUI是鸿蒙OS的UI开发框架,其特点包括:

声明式UI:使用XML或ETS(Enlightenment Template Script)文件声明UI结构。

组件化:提供了丰富的组件,如按钮、列表、导航等,支持组件的复用和嵌套。

动态能力:支持动态加载和卸载UI组件,优化内存使用。

响应式布局:能够根据不同设备和屏幕尺寸自适应布局。

13. 如何在鸿蒙应用中实现跨设备通信?

鸿蒙OS支持多种跨设备通信方式,包括:

分布式软总线:一种高性能的通信机制,允许设备之间建立直接连接,进行数据传输。

蓝牙:使用标准的蓝牙技术进行设备间的通信。

WLAN:通过WLAN网络实现设备间的通信。

远程服务调用:通过分布式任务调度实现跨设备的服务调用。

14. 如何实现应用的后台运行?

后台服务:使用后台服务(如BackgroundService)来执行不需要用户直接交互的任务。

定时任务:通过系统提供的定时任务机制(如AlarmService)来周期性执行后台任务。

事件监听:注册系统事件,如网络变化、电量变化等,以在特定事件发生时唤醒应用进行处理。

https://developer.huawei.com/
https://www.harmonyos.com/

我希望这篇文章对您有所帮助。

Thank you for reading.

推荐阅读

全栈开发ck
叩首问路,码梦为生