> 技术文档 > 鸿蒙考试-Ability生命周期篇_鸿蒙6答题答案

鸿蒙考试-Ability生命周期篇_鸿蒙6答题答案


一、Ability生命周期核心总结

Page Ability 生命周期流程图

#mermaid-svg-ueG3sABrzgfVnMoo {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ueG3sABrzgfVnMoo .error-icon{fill:#552222;}#mermaid-svg-ueG3sABrzgfVnMoo .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ueG3sABrzgfVnMoo .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-ueG3sABrzgfVnMoo .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ueG3sABrzgfVnMoo .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ueG3sABrzgfVnMoo .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ueG3sABrzgfVnMoo .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ueG3sABrzgfVnMoo .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ueG3sABrzgfVnMoo .marker.cross{stroke:#333333;}#mermaid-svg-ueG3sABrzgfVnMoo svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ueG3sABrzgfVnMoo .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-ueG3sABrzgfVnMoo .cluster-label text{fill:#333;}#mermaid-svg-ueG3sABrzgfVnMoo .cluster-label span{color:#333;}#mermaid-svg-ueG3sABrzgfVnMoo .label text,#mermaid-svg-ueG3sABrzgfVnMoo span{fill:#333;color:#333;}#mermaid-svg-ueG3sABrzgfVnMoo .node rect,#mermaid-svg-ueG3sABrzgfVnMoo .node circle,#mermaid-svg-ueG3sABrzgfVnMoo .node ellipse,#mermaid-svg-ueG3sABrzgfVnMoo .node polygon,#mermaid-svg-ueG3sABrzgfVnMoo .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ueG3sABrzgfVnMoo .node .label{text-align:center;}#mermaid-svg-ueG3sABrzgfVnMoo .node.clickable{cursor:pointer;}#mermaid-svg-ueG3sABrzgfVnMoo .arrowheadPath{fill:#333333;}#mermaid-svg-ueG3sABrzgfVnMoo .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ueG3sABrzgfVnMoo .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ueG3sABrzgfVnMoo .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-ueG3sABrzgfVnMoo .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-ueG3sABrzgfVnMoo .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ueG3sABrzgfVnMoo .cluster text{fill:#333;}#mermaid-svg-ueG3sABrzgfVnMoo .cluster span{color:#333;}#mermaid-svg-ueG3sABrzgfVnMoo div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-ueG3sABrzgfVnMoo :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}重新激活重新显示返回创建onInit: 初始化onReady: UI加载完成onShow: 页面显示onActive: 获取焦点onInactive: 失去焦点onHide: 页面隐藏onBackPress: 返回键触发onDestroy: 销毁释放资源

关键回调详解
回调方法 触发场景 典型用途 onInit() Ability实例创建时 初始化变量、注册监听 onReady() UI加载完成时 动态修改UI布局 onShow() 页面从后台切换到前台 恢复动画、刷新数据 onHide() 页面被完全遮挡(如跳转新页面) 暂停耗时操作 onActive() 页面获得焦点(如解锁屏幕) 恢复传感器服务 onInactive() 页面失去焦点(如弹出对话框) 暂停视频播放 onBackPress() 用户点击返回键 拦截返回操作(返回true可阻止退出) onDestroy() 页面销毁时 释放资源、注销监听

特殊规则

  • 首次启动顺序:onInitonReadyonShowonActive
  • 按返回键退出:onBackPressonInactiveonHideonDestroy
  • 切换到后台:onInactiveonHide不会触发onDestroy

二、分题型预测题(每类10道)

1. 单选题(10道)
  1. 当Ability首次创建时,第一个执行的生命周期方法是?
    A. onReady
    B. onShow
    C. onInit
    D. onActive

  2. 需要在UI布局完成后动态添加组件,应重写哪个方法?
    A. onInit
    B. onReady
    C. onShow
    D. onActive

  3. 用户按下返回键时触发哪个回调?
    A. onHide
    B. onDestroy
    C. onBackPress
    D. onInactive

  4. 页面被系统对话框遮挡时,会触发哪个状态?
    A. onHide
    B. onInactive
    C. onDestroy
    D. onShow

  5. 下列哪种场景不会触发onDestroy
    A. 调用terminateSelf()
    B. 从最近任务列表划掉应用
    C. 按Home键切换到后台
    D. 代码中关闭Ability

  6. 从后台切换回前台时,生命周期顺序是?
    A. onShow → onActive
    B. onShow → onActive(若之前未失去焦点)
    C. onInit → onReady
    D. onActive → onShow

  7. 需要释放数据库连接时,应重写哪个方法?
    A. onHide
    B. onBackPress
    C. onDestroy
    D. onInactive

  8. 拦截返回键操作需在哪个方法中返回true
    A. onHide
    B. onBackPress
    C. onDestroy
    D. onInactive

  9. 页面跳转到其他Ability时,当前页面触发?
    A. onInactive → onHide
    B. onBackPress → onDestroy
    C. onActive → onShow
    D. 无变化

  10. 屏幕锁定后解锁,页面触发?
    A. onShow
    B. onActive
    C. onReady
    D. onInit


2. 判断题(10道)
  1. onReady() 在每次页面显示时都会调用。 (×,仅首次加载)
  2. 按Home键退出应用会触发onDestroy()。 (×,触发onInactive→onHide
  3. onActive()onInactive() 可能成对触发多次。 (,如弹窗出现/消失)
  4. onBackPress() 返回false表示不拦截返回操作。 (×,返回true才拦截)
  5. 页面被全屏视频覆盖时触发onHide()。 (
  6. onInit() 适合执行网络请求操作。 (×,应放在onShow或异步任务)
  7. 系统杀死进程前一定会调用onDestroy()。 (×,低内存时可能直接终止)
  8. onShow() 在从后台切换到前台时触发。 (
  9. 两个Ability切换时会同时处于onActive状态。 (×,同一时间只有一个Active)
  10. onDestroy() 中必须手动释放所有资源。 (

3. 简答题(10道预测)
  1. 简述首次启动Ability的生命周期流程

    答案onInit(初始化)→ onReady(UI就绪)→ onShow(页面显示)→ onActive(获取焦点)

  2. onHide()onDestroy() 的区别是什么?

    答案:onHide是页面被遮挡(仍存在内存中),onDestroy是页面被销毁释放资源

  3. 如何阻止用户点击返回键退出页面?

    答案:重写onBackPress()并返回true

  4. 在哪个生命周期恢复动画播放?为什么?

    答案:onActive,此时页面获得焦点且对用户可见

  5. 解释onInactive() 的典型使用场景

    答案:暂停实时操作(如GPS定位、视频播放),避免资源浪费

  6. 页面跳转时生命周期如何变化?

    答案:当前页:onInactiveonHide;新页面:onInitonReadyonShowonActive

  7. 为什么要在onDestroy()中释放资源?

    答案:防止内存泄漏(如未关闭的数据库连接、未注销的监听器)

  8. 从后台返回前台可能触发哪些回调?

    答案:若进程未销毁:onShowonActive;若进程被重建:完整生命周期

  9. onReady()onShow() 执行顺序的必然性

    答案:onReady在UI首次加载后执行,onShow在页面显示时执行,因此onReady早于onShow

  10. 设计一个需要拦截返回键的场景(示例)

    答案:用户正在填写表单,点击返回键时弹出提示“是否保存草稿?”


4. 程序填空题(2道示例)

题目1:补全生命周期方法

// 实现退出时保存数据的Abilityexport default class MainAbility extends Ability { onInit() { // 初始化数据 } onReady() { // 动态加载UI组件 } __________ { // 补全方法名:返回键拦截 prompt.showDialog({ message: \"确认退出?\" }); return true; // 拦截返回 } __________ { // 补全方法名:释放资源 data.saveToLocal(); // 保存数据 }}// 答案:onBackPress, onDestroy

题目2:状态管理结合生命周期

@Entry@Componentstruct MyPage { @State count: number = 0; __________ { // 页面显示时启动计时器 setInterval(() => { this.count++ }, 1000); } __________ { // 页面隐藏时清除计时器 clearInterval(this.timerId); } build() { ... }}// 答案:onShow(), onHide()(需在Ability中定义)

三、高频考点冲刺口诀

“初始(Init)就绪(Ready)显示(Show),活跃(Active)获焦点;
失焦(Inactive)隐藏(Hide)待后台,返回(BackPress)销毁(Destroy)终离别”