ArkTS(Stage 模型)全量生命周期函数整理
ArkTS 采用分层生命周期设计,从应用进程到 UI 组件共分为 6 个层级,不同层级负责不同范围的资源管理与状态回调。当前 HarmonyOS NEXT 已完全废弃 FA 模型,以下均为 Stage 模型下的标准生命周期。
一、应用级生命周期(Application)
全局唯一,对应整个应用进程的生命周期,在 AppScope/app.ets 中定义,是应用最早初始化、最后销毁的层级。
表格
| 生命周期函数 | 触发时机 | 典型用途 |
|---|---|---|
onCreate() |
应用进程首次创建时触发,全局仅执行 1 次 | 全局 SDK 初始化、全局异常捕获、全局状态初始化 |
onDestroy() |
应用进程完全销毁时触发 | 全局资源释放、持久化数据保存 |
onConfigurationUpdated(config) |
系统全局配置变更时触发,包括系统语言、深浅色模式、屏幕方向、字体大小等 | 全局主题切换、语言切换后的适配处理 |
onMemoryLevel(level) |
系统内存不足时触发,返回当前内存告警等级 | 释放非必要的大内存资源(如图片缓存、全局缓存),避免应用被系统杀死 |
二、模块级生命周期(AbilityStage)
每个 HAP/HSP 模块对应一个 AbilityStage 实例,是模块的全局入口,在模块首次加载时创建。需要在 module.json5 的 srcEntry 字段指定入口文件才会生效。
表格
| 生命周期函数 | 触发时机 | 典型用途 |
|---|---|---|
onCreate() |
模块首次加载时触发,每个模块仅执行 1 次 | 模块级初始化,如模块内通用 SDK、全局数据容器初始化 |
onDestroy() |
模块卸载 / 销毁时触发 | 释放模块级资源,注销模块级监听 |
onAcceptWant(want) |
显式 Want 启动 UIAbility 时触发,可拦截启动请求 | 实现 UIAbility 单实例模式、启动路由拦截、启动参数统一处理 |
onNewProcessRequest(want) |
新进程中启动 UIAbility 时触发 | 多进程场景下的进程初始化、参数处理 |
onConfigurationUpdated(config) |
模块所属配置变更时触发 | 模块级配置适配 |
onMemoryLevel(level) |
模块收到内存告警时触发 | 释放模块内的缓存资源 |
三、UIAbility 生命周期(页面入口级)
UIAbility 是 Stage 模型中带 UI 界面的应用入口组件,每个 UIAbility 对应一个页面栈,是应用页面生命周期的核心。
标准生命周期(按启动顺序排列)
表格
| 生命周期函数 | 触发时机 | 典型用途 |
|---|---|---|
onCreate(want, launchParam) |
UIAbility 实例首次创建时触发,仅执行 1 次 | 初始化 Ability 级数据、注册全局事件监听、获取启动参数 |
onWindowStageCreate(windowStage) |
窗口管理器创建完成时触发 | 加载首页 UI(loadContent)、配置窗口属性、设置窗口导航栏 / 状态栏样式 |
onForeground() |
Ability 从后台进入前台,对用户可见时触发 | 恢复页面动画、刷新实时数据、重启暂停的定时器 / 任务 |
onNewWant(want, launchParam) |
Ability 已存在(单实例模式),再次被启动时触发 | 处理二次启动的参数、跳转指定页面 |
onBackground() |
Ability 从前台退入后台,对用户不可见时触发 | 暂停动画、保存临时状态、停止非必要的后台任务 |
onWindowStageDestroy() |
窗口管理器即将销毁时触发 | 释放 UI 相关资源、注销窗口事件监听 |
onDestroy() |
UIAbility 实例完全销毁时触发 | 释放所有 Ability 级资源、注销所有监听、清理定时器 |
补充回调
表格
| 生命周期函数 | 触发时机 | 典型用途 |
|---|---|---|
onConfigurationUpdated(config) |
系统配置变更时触发 | 页面级横竖屏、深浅色适配 |
onMemoryLevel(level) |
内存告警时触发 | 释放页面内的大内存资源(如大图、渲染缓存) |
四、窗口级生命周期(WindowStage)
WindowStage 是窗口管理的核心代理,其生命周期与 UIAbility 绑定,额外支持窗口事件的监听回调,通过 windowStage.on() 方式注册。
表格
| 事件回调 | 触发时机 | 典型用途 |
|---|---|---|
'windowStageEvent'(获焦 / 失焦) |
窗口获得 / 失去输入焦点时触发 | 页面获焦时恢复播放、失焦时暂停播放(如视频页面) |
'windowSizeChange' |
窗口大小变化时触发(如分屏、横竖屏切换) | 适配窗口尺寸变化,重新计算布局 |
'windowVisibleChange' |
窗口可见性变化时触发 | 窗口隐藏时暂停渲染,显示时恢复 |
五、页面级生命周期(Navigation 路由页面)
仅被 Navigation 组件管理的 Page 页面生效,对应页面栈的入栈、出栈、切换操作,与应用前后台无关。
表格
| 生命周期函数 | 触发时机 | 典型用途 |
|---|---|---|
onPageShow() |
页面显示时触发(包括首次进入、从其他页面返回、应用切回前台) | 页面埋点、页面级数据刷新 |
onPageHide() |
页面隐藏时触发(包括跳转到其他页面、应用退后台) | 暂停页面任务、保存页面临时状态 |
onBackPress() |
用户点击返回键 / 手势返回时触发 | 拦截返回操作(如二次确认退出、保存草稿) |
注意:
onPageShow/onPageHide会跟随应用前后台触发;而onForeground/onBackground是 Ability 级,是整个应用的前后台回调。
六、自定义组件生命周期(最常用)
所有被 @Component 装饰的自定义组件通用,是日常开发中使用频率最高的生命周期。
标准生命周期(按执行顺序)
表格
| 生命周期函数 | 触发时机 | 典型用途 | 注意事项 |
|---|---|---|---|
constructor() |
组件实例化时触发,仅执行 1 次 | 初始化组件内部变量、非响应式数据 | 不能访问父组件传入的 Props,此时 Props 尚未赋值 |
aboutToAppear() |
组件即将挂载、build 执行前触发,仅执行 1 次 |
加载初始数据、注册事件监听、初始化定时器 | 可访问 Props,是数据初始化的最佳时机 |
build() |
组件 UI 渲染函数,状态变化时会重新执行 | 声明式构建 UI 结构 | 纯函数原则:禁止写异步操作、修改状态、定时器,否则会导致无限重绘 |
onAppear() |
组件完成渲染、首次显示在屏幕上时触发 | 获取组件尺寸、启动入场动画、初始化第三方 UI 库 | 仅首次挂载时执行 1 次 |
aboutToUpdate() |
状态变化后、重新执行build前触发 |
记录更新前的状态、做更新前的预处理 | 禁止在此处修改状态,会导致循环更新 |
onUpdate() |
状态变化导致 UI 重新渲染完成后触发 | 更新后执行 DOM 操作、同步第三方库状态 | 每次状态更新后都会执行 |
aboutToDisappear() |
组件即将卸载、最后一次 build 后触发 | 注销事件监听、清理定时器、释放资源(如 PixelMap) | 资源清理的核心位置,避免内存泄漏 |
onDisappear() |
组件完全卸载、从屏幕移除后触发 | 最终清理、上报销毁埋点 | 此时组件已不可见 |
可复用组件专属生命周期
仅在 LazyForEach 列表复用、@Reusable 装饰的组件中生效,用于列表项复用时的状态重置。
表格
| 生命周期函数 | 触发时机 | 典型用途 |
|---|---|---|
aboutToReuse(params) |
列表项被复用时触发,旧组件实例被复用给新数据 | 重置组件内部状态、更新复用数据 |
七、完整启动执行流程(从点击图标到页面显示)
plaintext
Application.onCreate()
→ AbilityStage.onCreate()
→ UIAbility.onCreate()
→ UIAbility.onWindowStageCreate()
→ 根组件 constructor()
→ 根组件 aboutToAppear()
→ 根组件 build()(递归渲染所有子组件)
→ 根组件 onAppear()
→ UIAbility.onForeground()
→ 页面 onPageShow()
八、常见易错点
- 资源成对管理:所有在
aboutToAppear中注册的监听、定时器,必须在aboutToDisappear中注销,否则会造成内存泄漏。 - build 函数禁忌:绝对不能在
build中执行异步操作、修改状态、创建新对象,会导致严重的性能问题和无限重绘。 - 作用域区分:应用切后台会同时触发
onBackground和onPageHide;页面跳转只会触发onPageHide,不会触发onBackground。 - 层级边界:
onForeground是整个 Ability 的前后台回调,onPageShow是单个页面的显示回调,多页面 Ability 中需严格区分使用场景。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)