
1. 组件与生命周期
Q1: 自定义组件的生命周期有哪些?执行顺序是怎样的?
答案核心 :
自定义组件(@Component)的主要生命周期包括:
- aboutToAppear :组件实例创建完成,但
build函数尚未执行。- 用途:初始化状态变量、发起网络请求。
- build(非回调,是定义):定义 UI 结构。
- onDidBuild :
build函数执行完毕,UI 树节点创建完成。- 用途:做一些不影响布局的后续操作。
- aboutToDisappear :组件即将销毁。
- 用途:销毁定时器、取消订阅、释放资源。
页面入口组件 (@Entry) 额外拥有:
onPageShow: 页面可见(切前台、路由入栈)。onPageHide: 页面不可见(切后台、路由出栈)。onBackPress: 物理返回键触发。
Q2: 什么是 FrameNode?它解决了什么问题?
答案核心 :
FrameNode 是 ArkUI 提供的更底层的节点操作能力(通常在 C-API 或高级封装中使用,但在 ArkTS 中也有对应概念)。
- 解决问题 :传统的
@Component封装会有一定的性能开销(状态管理、对象创建)。对于高性能场景(如游戏引擎对接、大规模动态布局框架),直接操作FrameNode可以绕过部分状态管理机制,直接控制渲染树,提升性能。 - 场景:自定义图表库、动态 DSL 渲染引擎。
2. 渲染与布局
Q3: LazyForEach 的原理是什么?keyGenerator 的作用?
答案核心:
- 原理 :
LazyForEach不会一次性创建所有子组件,而是根据滚动容器(List/Grid)的可视区域,按需创建组件。当组件滑出屏幕(超出 cachedCount 范围)时,会被销毁或放入复用池。 - keyGenerator :
- 作用:为每个数据项生成唯一标识。ArkUI 通过 key 来判断数据是否变化、是否移动。
- 风险 :如果 key 重复,会导致渲染异常;如果 key 每次都变(如使用
index或Date.now()),会导致无法复用组件,性能极差。
Q4: 简述 ArkUI 的渲染流程。
答案核心:
- UI 描述 :执行 ArkTS 的
build函数。 - Diff 算法:对比新旧 UI 树(如果是初次渲染则跳过),找出变化的节点。
- Layout (布局) :
- Measure: 计算组件大小。
- Place: 确定组件位置。
- Render (绘制):生成绘制指令。
- Rasterization (光栅化):GPU 执行绘制指令,显示在屏幕上。
- 优化点 :尽量减少 Layout 和 Render 的触发频率(例如使用
@Component隔离更新范围)。
Q5: 如何实现自定义组件的 Measure 和 Layout?
答案核心 :
可以通过 onMeasureSize 和 onPlaceChildren 接口(或使用 C-API 的自定义节点)。
- onMeasureSize(selfLayoutInfo, children[], constraint): 接收父组件的约束,计算所有子组件的大小,最后返回自身的大小。
- onPlaceChildren(selfLayoutInfo, children[], constraint): 根据子组件的大小,计算并设置每个子组件的坐标 (x, y)。
- 这允许开发者实现类似
FlowLayout(流式布局)等系统未提供的复杂布局。
3. 交互与动画
Q6: ArkUI 的事件分发机制是怎样的?
答案核心 :
ArkUI 采用冒泡机制(Touch 事件)。
- Hit Test: 确定触摸点落在哪个组件上。
- Dispatch: 事件首先传递给目标组件。
- Bubble: 如果目标组件未消费该事件(返回 false 或未绑定),事件会向父组件冒泡,直到被消费或到达根节点。
- 阻断冒泡 :在事件回调中调用
event.stopPropagation()。
Q7: 属性动画 (animation) 和 显式动画 (animateTo) 的区别?
答案核心:
- 属性动画 (
.animation(...)) :- 绑定方式:直接链式调用在组件属性后。
- 触发时机:只要该组件的属性(如 width, opacity)发生变化,自动应用动画。
- 场景:简单的单一属性变化。
- 显式动画 (
animateTo({ params }, () => { ... })) :- 绑定方式:全局函数。
- 触发时机:闭包内的状态变量变化导致的所有 UI 变更,都会应用动画。
- 场景:多个组件、多个属性同时变化的复杂动画,或状态驱动的动画。
Q8: XComponent 的作用是什么?
答案核心 :
XComponent 是 ArkUI 提供的用于渲染原生内容(Native C++ / EGL / OpenGL / Vulkan)的容器。
- 场景:游戏渲染、地图引擎、视频播放器、相机预览。
- 特点:它提供了一个独立的 Surface,允许 C++ 层直接进行绘制,绕过 ArkUI 的渲染管线,性能极高。
别再犹豫,海量面试真题库已备好!
👉 点我立马开始刷题