本文作者原创,首发在本博客;CSDN 上的同名文章已标注为转载并回链到本页:https://blog.csdn.net/qq_30220519/article/details/169850920
这份是把我备考时刷的 97 道 ArkTS 判断题整理成的一份速刷清单,题目来自我自己的一次复习对话记录,再逐条对着华为 / OpenHarmony 官方文档核对答案。它不是官方真题原文,认证考试有答题保密约定,所以对外我只叫它「考点速刷」;但每一条的判断和理由我都按当期文档重新核过一遍,可以直接当自测表用。
系统性的知识梳理见另一篇备考笔记,本篇只做「一句话判断 + 一句话理由」的高密度版。
先说订正了什么
原始题库里有 1 条答案判错、4 条表述有歧义、12 条我暂时无法独立确认。发布前已经全部改掉或标注,刷题时按订正后的版本记。
| 类型 | 题号 | 处理 |
|---|---|---|
| 答案判错,已订正 | 44 | 生命周期那条改成「错误」,并写清 UIAbility 与 FA 模型 Ability 的区别 |
| 表述绝对化,已改写 | 34、41、50、1 | 收窄措辞或补上真正的规则,避免记成「一律如此」 |
| 存疑,已标注 | 6、12、23、24、29、31、46、51、60、74、89、96 | 保留原判断,但注明「以官方当期文档为准」,别当结论背 |
另外整套题混了不同 API 版本的规则(第 7 题就是 API 21 才放开的新限制),考试以当期考纲为准,刷题时留意版本。
一、后台任务、线程、Worker、Native 子进程
- 需要在后台运行的耗时任务只在所有线程都空闲时才触发执行。
判断:正确。taskpool 的 IDLE 优先级就是给后台耗时任务用的,只在空闲时执行。原题还有半句「同一时间仅有一个同 IDLE 优先级任务执行」,这半句我在官方文档里没找到原句,按前半句判断即可。 - Worker 线程支持同步调用主线程接口。
判断:错误。Worker 与主线程通过postMessage异步通信,不支持同步调用。 - entry 模块中引入 HAR 包内的 Worker 对象,路径写成
har/ets/workers/Worker.ets。
判断:正确。跨包引用 Worker 时要带上模块名。 NativeChildProcess_MainProc返回后子进程不会自动退出,需要手动调用终止接口。
判断:错误。MainProc 返回后子进程自动退出。- 回调
onProcessStart在主线程运行,不需要考虑线程同步。
判断:错误。回调运行在子进程自己的线程里,跨进程交互必须考虑同步。 NativeChildProcess_OnConnect的执行优先于NativeChildProcess_MainProc。
判断:原题判正确(存疑)。OnConnect 是客户端发起连接时的 IPC 回调,常规实现里 MainProc 反而更早,先后顺序请以当期 NativeChildProcess 文档和示例为准。- 应用退到后台申请长时间任务,同一 UIAbility 同一时刻最多支持两个长时任务(API 20 及之前)。
判断:错误。API 20 及之前一个 UIAbility 同一时刻最多持有 1 个长时任务,API 21 才放宽到最多 10 个。 - 主线程与其他线程存在大量数据交互时,可以用
@Unsafe装饰器做线程间传递与同步。
判断:错误。并发 Actor 模型用的是@Sendable,没有@Unsafe这个装饰器。 - Actor 并发模型支持传输 Serializable 对象。
判断:错误。Actor 消息传递支持 Sendable、Transferable;Serializable 是持久化用的,不能作为 Actor 传参。
二、ArkUI 状态管理 V2(@ObservedV2 / @Trace / @Param / @Provide / @Consume)
- V2 里用
@Attrs装饰的属性变化能触发 UI 刷新。
判断:错误。V2 的响应式是@ObservedV2+@Trace,没有@Attrs这套。 - 嵌套类的属性被
@Trace装饰,且该嵌套类被@ObservedV2装饰时,才具备触发 UI 刷新的能力。
判断:正确。两层条件缺一不可。 @ObservedV2实例目前不支持 JSON 序列化。
判断:原题判正确(存疑)。V2 代理对象在序列化上确实有限制,但具体范围以状态管理 V2 文档为准。- 被
@Trace装饰的属性变化时,只会通知与该属性关联的组件刷新。
判断:正确。这就是 V2 的精准更新,按属性粒度刷新依赖节点。 - 未被
@Trace装饰的属性变化也能触发 UI 刷新。
判断:错误。V2 只有@Trace标记的属性变更才驱动 UI。 - V2 的双向绑定用
!!语法糖,自定义组件的双向绑定通过@Param+@Event组合实现。
判断:正确。 @Provide/@Consume摆脱逐层传参,可以跨层级传递数据。
判断:正确。@Provide/@Consume能实现祖先与后代组件的双向数据同步。
判断:正确。两者是同一份状态的双向绑定。@Provide/@Consume可以在多层级父子组件之间传递状态。
判断:正确。@Provide装饰的变量写在后代组件、@Consume写在祖先组件。
判断:错误。方向正好相反:@Provide在祖先侧提供,@Consume在后代侧消费。- 只要参数同时包含按值传递和按引用传递,状态变量改变就不会触发动态渲染。
判断:错误。传递方式本身不是不刷新的原因,问题出在装饰器和属性层级。 - 用对象字面量传对象,只修改对象的深层属性,不会触发 UI 刷新。
判断:正确。没有@Trace标记深层属性、又没替换引用,V2 感知不到。 - 传入两个以上对象字面量时,修改深层属性就一定能刷新 UI。
判断:错误。数量不改变结论,深层属性照样不触发刷新。
三、DevEco Previewer 预览
@StorageProp装饰的属性可以在 Previewer 正常预览 UI,但 AppStorage 的同步逻辑在预览器里不生效。
判断:原题判正确(存疑)。预览器的能力边界随 DevEco Studio 版本变化,以当期文档为准。@StorageLink装饰的属性同上。
判断:原题判正确(存疑)。与第 23 题同一组限制。@Link装饰的子组件可以直接单独预览。
判断:错误。@Link依赖父组件传入的绑定,单独预览会初始化失败,要预览父组件。@Consume装饰的子组件可以直接单独预览。
判断:错误。@Consume依赖祖先的@Provide,单独预览取不到状态。- 组件内部调用了 C++ SO 库,仍然能在 Previewer 正常预览。
判断:错误。预览器不支持 Native SO 调用。 - DevEco 本地模拟器用于在个人电脑上模拟鸿蒙环境,方便应用与服务调试。
判断:正确。 - macOS 运行 DevEco 本地模拟器,系统版本至少 12.5。
判断:原题判正确(存疑)。数值请查官方环境要求表格,别靠记忆。 - DevEco 本地模拟器可以跑在虚拟机里以节省硬件资源。
判断:错误。官方不支持虚拟机嵌套运行模拟器。 - Mac 运行本地模拟器推荐至少 8G 内存。
判断:原题判正确(存疑)。同第 29 题,以官方配置要求为准。
四、组件、布局、弹窗、LazyForEach、FrameNode
- Flex 布局要让子元素在交叉轴方向拉伸填充,设置
alignItems: ItemAlign.Stretch。
判断:正确。 - 输入框自定义键盘使用
customKeyboard接口。
判断:正确。 - List 组件自带复用池,只支持当前页面内节点复用。
判断:正确(已改写)。List/Grid 的内置复用池是页面级,随页面销毁;需要跨页面复用时,自己用BuilderNode+NodePool或@Reusable维护缓存池。 FrameNode.isModifiable()用来判断当前节点能否设置属性、修改子节点。
判断:正确。- 用
componentContent形式创建 CustomDialog 可以解耦 UI,并支持动态更新弹窗内容。
判断:正确。 updateCustomDialog更新弹窗属性时,未传的参数会保留原有值。
判断:错误。未设置的属性会被重置为默认值。- 想同时操作弹窗内部和外部控件,必须把
isModal设为 false。
判断:正确。isModal = true时外部不可交互。 keyboardAvoidMode.Default可启用弹窗自动避让软键盘。
判断:正确。- LazyForEach 生效条件:数据源实现
IDataSource、每项 key 唯一、超出可视区域的节点被回收。
判断:正确。 - 优先用自定义组件代替
@Builder做 UI 复用是官方推荐方案。
判断:错误。官方的口径更接近「轻量、无状态的 UI 复用优先@Builder,开销更小;需要独立状态、生命周期或复用池的场景再用自定义组件(可配合@Reusable)」,不是绝对的二选一。
五、UIAbility、Want、任务栈、生命周期、HAR / HSP / HAP
- 多模块工程里 feature 模块要用公共 library HAR,在
oh-package.json5的dependencies里配置。
判断:正确。 - 构建 HAR 静态共享包:选中 HAR 模块 → Build → Make Module。
判断:正确。 - UIAbility 的生命周期回调包含 onCreate、onStart、onBackground、onStop、onDestroy。
判断:错误(本卷唯一大坑)。这是 Stage 模型与 FA 模型混在一起的说法。Stage 模型的 UIAbility 是onCreate→onWindowStageCreate→onForeground→(onNewWant)→onBackground→onWindowStageDestroy→onDestroy,另有onContinue;onStart/onStop/onActive/onInactive属于 FA 模型的 Ability,不是 UIAbility 的回调。 multiton启动类型的 UIAbility 每次启动都新建任务卡片,singleton复用同一个任务卡片。
判断:正确。- 先启动 UIAbility1(multiton)再返回销毁,启动 UIAbility2(singleton)再返回销毁,再启动一次 UIAbility2 再返回销毁,多任务列表里能看到 2 个任务视图。
判断:原题判正确(存疑)。这是实测类结论,需要真机或官方示例佐证,别当规律背。 - Want 隐式启动 UIAbility 时没有匹配到组件,启动失败。
判断:正确。 - Want 隐式启动只匹配到一个满足条件的 Ability,直接启动它。
判断:正确。 - Want 隐式启动匹配到多个 UIAbility 时,系统直接选第一个启动。
判断:错误。多个匹配时系统会拉起选择框,由用户指定。 - Want 隐式启动匹配到多个 UIAbility 时直接启动失败。
判断:错误。正确行为就是第 49 题的理由:多个匹配项交给用户选择,不会失败。 - 动态 HSP 与宿主应用的包名、进程、生命周期保持一致;动态 HAP 不可以和宿主包一起打包发布。
判断:原题判正确(存疑)。这组术语容易记混,建议直接对照「动态加载 HAP / HSP」原文再定。
六、Web 组件、JS 桥、鼠标事件、ContextMenu
- Web 组件的
mixedMode()用于允许网页加载 HTTP 链接。
判断:正确。 - WebView 通过 JSBridge 通道访问扩展的原生 API(Hybrid)。
判断:正确。 - 同层渲染可以让 H5 里渲染原生组件,解决层级覆盖问题。
判断:正确。 - Hybrid 应用的界面与业务逻辑可复用 Web 生态:HTML + CSS 绘制界面,JS 编写业务逻辑。
判断:正确。 - Web 组件
loadUrl加载网络页面,loadData加载 HTML 文本字符串。
判断:正确。 - 鼠标事件在 ArkUI 里会先做碰撞(命中)测试再回调响应,鼠标左键还会额外生成一份触摸事件。
判断:正确。 - 鼠标事件收到后不做任何处理,直接传递给上层应用。
判断:错误。要经过命中测试、分发、回调冒泡。 onContextMenuShow回调返回的结果类型是WebContextMenuResult。
判断:正确。WebContextMenuResult里有pasteAndMatchStyle方法。
判断:原题判错误(存疑)。这是接口表细节,请查 Web 组件接口清单确认。- Web 与 ArkTS 的 JS 桥接,最常用的是
registerJavaScriptProxy。
判断:正确。
七、AppLinking、跨设备拖拽、意图共享
- AppLinking 在
appLinkingOnly = false且目标应用已安装时,直接跳转打开目标应用。
判断:正确。 - AppLinking 在
appLinkingOnly = true且目标应用已安装时,直接跳转打开目标应用。
判断:正确。 - AppLinking 在
appLinkingOnly = true且目标应用未安装时,返回失败、系统不跳转,交给应用自行处理。
判断:正确。 - 跨设备拖拽要求两端设备登录同一个华为账号。
判断:正确。 - 跨设备拖拽要求两端打开 WiFi、蓝牙并接入同一局域网。
判断:正确。 - 所有资源文件都支持跨设备拖拽。
判断:错误。部分资源不支持,例如 HAP 预置资源。 - 跨设备拖拽需要打开键鼠穿越开关。
判断:正确。 - 端侧意图共享不能同时构建多个意图对象分发。
判断:错误。支持批量构造多个意图对象分发。
八、数据库、IAP、文档扫描、ConnectivityKit 蓝牙
- 键值型数据库和关系型数据库都支持备份与恢复,键值型还支持删除备份文件释放本地空间。
判断:正确。 - 文档扫描能力从 MediaLibraryKit 导入,用于媒体库文档资源扫描管理。
判断:错误。文档扫描属于 VisionKit。 - SpeechKit 提供语音转文档扫描功能。
判断:错误。SpeechKit 是语音识别与语音合成,不做文档扫描。 - 用户 IAP 购买成功后,应用客户端向应用服务上报 purchase 订单数据。
判断:正确。 - ConnectivityKit 的 Connection 模块只负责蓝牙连接管理,不负责蓝牙开关控制和数据收发。
判断:原题判正确(存疑)。蓝牙能力在@ohos.bluetoothManager与 Connectivity Kit 之间的具体划分需要核对当期文档。
九、代理提醒、未成年人模式
- 代理提醒适合长时间后台、用户可感知的任务(音乐播放、导航),防止进程被系统挂起。
判断:正确。 - 系统未成年人模式关闭时,用户可以在应用内开启系统的未成年人模式。
判断:错误。应用不能控制系统总开关,只能控制应用内自身的未成年人模式。 - 系统未成年人模式开启时,应用跟随系统进入未成年人模式。
判断:正确。 - 系统未成年人模式关闭时,用户可以在应用内单独开启应用自身的未成年人模式。
判断:正确。 - 应用内开启未成年人模式后,可以在应用内关闭系统级未成年人模式。
判断:错误。应用无权控制系统全局开关。
十、事件订阅、NAPI、Promise、Crash 定位、混淆、工程化
- EventHub 取消事件订阅用
off()。
判断:正确。 - NAPI 中
napi_callback_info用于获取 JS 侧传入的参数,napi_callback是回调函数类型,async_complete_callback用于异步完成通知。
判断:正确。 - Promise 一旦 fulfilled 或 rejected,状态固定,不能再改。
判断:正确。 - JS Crash 日志可以用 hdc 获取,但只能看 HeapLog,拿不到完整 FaultLog。
判断:错误。通过 hdc 可以拉取 FaultLog 文件。 - Release 包配合 HiStark + SourceMap 可以解析 JS 崩溃堆栈。
判断:正确。 - Release 构建时把
arkOptions.obfuscation.enable设为 false 即可开启混淆保护 HAP 资产。
判断:错误。要设为 true 才开启混淆。 obfuscation-rules.txt配置当前模块自身的混淆规则;consumer-rules.txt是给依赖本模块的下游传递规则,不是本模块的混淆配置。
判断:正确。consumer-rules.txt用来配置当前模块的混淆规则。
判断:错误。同第 86 题,它面向下游消费者。- hdc 拉起 UIAbility 传参时,
--ps传字符串参数,--psn传数字参数。
判断:正确。
十一、应用上架、应用分身、多开、关联安卓应用
- 鸿蒙应用关联安卓版本应用,只能在发布鸿蒙应用时关联,全网发布后无法再关联。
判断:原题判错误(存疑)。这属于 AppGallery Connect 的上架流程,能不能补关联请以 AGC 当期说明为准。 - 应用状态为「公开测试」时,支持申请下架。
判断:正确。 - 已有多账号能力的应用,用 multiton(应用多实例)方案做多开,适配工作量更少。
判断:正确。 - 需要沙箱完全隔离、本身不支持多账号的应用,采用应用分身方案做多开。
判断:正确。
十二、补充高频题
- 自定义组件生命周期顺序:aboutToAppear → build → onDidBuild → aboutToDisappear。
判断:正确。 @Local是 V2 状态管理里组件内局部状态的装饰器。
判断:正确。- List、Scroll 内置的复用池是页面级,页面销毁时复用池跟着销毁。
判断:正确。与第 34 题是同一件事。 - 跨设备拖拽必须同时满足同华为账号、蓝牙 + WiFi 开启、同局域网、键鼠穿越开启,缺一不可。
判断:原题判正确(存疑)。这四条是官方列出的前提条件,但「缺一不可」是绝对化表述,实际以官方说明为准。 - 应用间可以通过 URI + Want 拉起并传递参数。
判断:正确。
怎么用这份清单
先只看题干遮住判断做一遍,错的题号记下来;第二遍只做错题,并且要能说出「为什么错」,特别是 44、7、19、37、49 这几条——它们都属于「记混了两套模型 / 记反了方向」的题型,考场上最容易得分也最容易丢分。存疑的 12 条不用背,知道自己不确定、考试时按文档口径判断就够了。
参考
HarmonyOS 应用开发者高级认证-理论考试 - 华为开发者学堂
存疑的题号(6、12、23、24、29、31、46、51、60、74、89、96)涉及预览器、NativeChildProcess、ConnectivityKit、AGC 流程等细节,请直接到华为开发者文档站按关键词检索当期说明,不要依赖任何人的记忆,包括我的。