当前位置: 首页 > ds >正文

鸿蒙考试-Ability生命周期篇

一、Ability生命周期核心总结

Page Ability 生命周期流程图
重新激活
重新显示
返回
创建
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:补全生命周期方法

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

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

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

三、高频考点冲刺口诀

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

http://www.xdnf.cn/news/13425.html

相关文章:

  • 到院率最高提升40%,消费医疗用AI营销机器人跑赢增长焦虑
  • 【python深度学习】Day 50 预训练模型+CBAM模块
  • 高效多尺度网络与可学习离散小波变换用于盲运动去模糊
  • 第四章 RAG 知识库基础
  • CanFestival移植到STM32G4
  • HTML实现的2048游戏
  • 从算法到系统架构:AI生成内容连贯性技术深度解析
  • 全网首发!AgentCPM-GUI通过adb操控手机教程
  • pikachu靶场通关笔记23 SQL注入06-delete注入(报错法)
  • RT_Thread——邮箱
  • Monorepo + PNPM 搭建高效多项目管理
  • 基于流形迁移学习的快速动态多目标进化算法(MMTL-MOEA/D)求解FDA1-FDA5和dMOP1-dMOP3,提供完整MATLAB代码
  • ubuntu桌面x11异常修复
  • 《安富莱嵌入式周报》第354期: 开源36通道16bit同步数据采集卡,开源PoE以太网GPIB,分体式键盘DIY,微软WSL开源,USB转车载以太网
  • 第5章 类的基本概念 笔记
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | EventKey Codes(键盘码)
  • Vim 调用外部命令学习笔记
  • 主键(PRIMARY KEY)与唯一键(UNIQUE KEY)的区别详解
  • 代码随想录算法训练营第60期第六十四天打卡
  • Maven 多仓库配置及缓存清理实战分享
  • 反向工程与模型迁移:打造未来商品详情API的可持续创新体系
  • 工厂方法模式(Factory Method Pattern)
  • 一个完整的日志收集方案:Elasticsearch + Logstash + Kibana+Filebeat (三)
  • 通义灵码 AI IDE 上线!智能体+MCP 从手动调用工具过渡到“AI 主动调度资源”
  • 欧盟手机和平板电脑生态设计和能源标签法案解析
  • 零基础玩转物联网-串口转以太网模块如何快速实现与MQTT服务器通信
  • 【Elasticsearch】Elasticsearch 近实时高速查询原理
  • 0610_特性和反射_加密和解密_单例模式
  • Python爬虫基础之Selenium详解
  • 如何排查 Docker 容器资源占用过高的问题?