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)来周期性执行后台任务。
事件监听:注册系统事件,如网络变化、电量变化等,以在特定事件发生时唤醒应用进行处理。
Thank you for reading.