很多人学鸿蒙开发,代码能写、页面能跑,但永远踩坑:
- 切后台再切前台,接口疯狂重复请求
- 页面退出了,定时器还在跑、内存泄漏
- 莫名闪退、黑屏、资源卡死
- 音乐、定位后台忘记暂停,APP耗电严重
所有问题根源只有一个:看不懂、用不对生命周期!
今天这篇,不讲官方废话,用大白话+真实bug场景+可直接复制代码,一次性彻底吃透鸿蒙 Stage 模型 ArkTS 全生命周期。
(内容基于华为官方文档整理:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/app-lifecycle)
一、先搞懂:鸿蒙生命周期到底是什么?
一句话:
APP从打开 → 运行 → 切后台 → 切前台 → 关闭 的全过程,系统自动执行的一套“生命周期回调函数”。
你所有的bug,都是因为:
该初始化的地方没初始化、该停的任务没停、该销毁的资源没销毁。
鸿蒙生命周期分为4层(从大到小)
1. App全局层:整个APP一辈子只创建、销毁一次
2. UIAbility应用层:掌控前台、后台、窗口创建销毁
3. Page页面层:页面显示、隐藏、返回监听
4. Component组件层:组件创建、销毁、资源释放
二、最容易被忽略:App 全局生命周期
什么时候执行?
- 打开APP一瞬间: onCreate (全局只1次)
- APP彻底退出: onDestroy
能干什么?
✅ 全局初始化:登录态、SDK、全局配置
✅ 内存过低自动释放资源
✅ APP退出保存数据
绝对不要在这里写页面请求、定时器!!
三、核心重点:90%bug都出自 UIAbility
UIAbility 是鸿蒙APP的真正大脑
所有前后台切换、窗口加载、程序存活全靠它。
7个关键生命周期
1. onCreate
APP第一次打开,只执行一次。
适合:初始化全局变量、上下文
2. onWindowStageCreate
窗口创建,加载首页页面
所有项目首页都是在这里挂载!
3. onForeground【超级重要】
APP从后台切回前台
✅ 刷新数据、恢复播放、恢复定位、恢复轮询
4. onBackground【超级重要】
APP进入后台
✅ 必须暂停定时器、暂停网络轮询、暂停音视频
不暂停 = 耗电、闪退、被系统杀后台
5. onWindowStageDestroy
窗口消失、页面全部卸载
6. onDestroy
APP彻底销毁
7. onNewWant(隐藏坑点)
APP没关,再次点击图标
不会走onCreate!只会走onNewWant
很多人跳转参数丢失就是因为不知道这个!
完整正确可用 EntryAbility 代码
arkts
import UIAbility from '@ohos.app.ability.UIAbility';
import hilog from '@ohos.performanceAnalysisKit';
import window from '@ohos.window';
import type AbilityConstant from '@ohos.app.ability.AbilityConstant';
import type Want from '@ohos.app.ability.Want';
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
hilog.info(0x0001, "Ability", "应用创建");
}
onWindowStageCreate(windowStage: window.WindowStage): void {
windowStage.loadContent('pages/Index');
}
// 切前台:刷新数据
onForeground(): void {
hilog.info(0x0001, "Ability", "回到前台,刷新页面数据");
}
// 切后台:暂停所有任务
onBackground(): void {
hilog.info(0x0001, "Ability", "进入后台,暂停定时器/网络");
}
onDestroy(): void {
hilog.info(0x0001, "Ability", "应用销毁");
}
}
四、页面Page生命周期:解决重复请求、页面刷新问题
页面三个核心:
- onPageShow :页面每次显示(打开、切前台)→ 放刷新接口
- onPageHide :页面隐藏 → 停止请求
- onBackPress :拦截返回键
五、组件Component生命周期:根治内存泄漏
ArkTS组件最重要两个:
1. aboutToAppear
组件出现前,初始化数据、开启定时器
2. aboutToDisappear【必记!】
组件销毁时:
✅ 清空定时器
✅ 取消网络请求
✅ 关闭播放器
✅ 取消订阅
90%内存泄漏全是这里没写!
完整页面示例(无bug标准模板)
arkts
@Entry
@Component
struct Index {
timer: number = 0
// 组件创建
aboutToAppear() {
this.timer = setInterval(()=>{
console.log("轮询请求")
},1000)
}
// 页面显示
onPageShow() {
console.log("页面刷新数据")
}
// 页面隐藏
onPageHide() {
console.log("暂停请求")
}
// 组件销毁,清空资源
aboutToDisappear() {
clearInterval(this.timer)
}
build() {
Column(){
Text("鸿蒙生命周期标准模板")
}
}
}
六、高频Bug对照:看完直接根治所有问题
Bug1:切后台耗电、被系统杀后台
✅ 解决:onBackground 暂停所有定时、网络、音频
Bug2:切前台数据不刷新
✅ 解决:onForeground / onPageShow 重新请求
Bug3:页面销毁定时器还在跑 → 内存泄漏
✅ 解决:aboutToDisappear 清空定时器
Bug4:再次点击图标页面不刷新
✅ 解决:重写 onNewWant
Bug5:接口重复请求、双次执行
✅ 解决:初始化放 aboutToAppear,刷新放 onPageShow
七、全网最清晰:鸿蒙生命周期执行顺序
1. 首次打开APP
Application.onCreate
→ Ability.onCreate
→ onWindowStageCreate
→ onForeground
→ 页面aboutToAppear
→ onPageShow
2. 切后台
onPageHide
→ onBackground
3. 切回前台
onForeground
→ onPageShow
4. 关闭APP
onPageHide
→ aboutToDisappear
→ onBackground
→ 窗口销毁
→ Ability销毁
→ App销毁
八、新手必记3句话(吃透等于学会80%鸿蒙)
1. 初始化不要乱写,全局放App,页面放aboutToAppear
2. 刷新数据永远放 onPageShow / onForeground
3. 所有定时、监听、请求,必须在销毁时关闭
结尾总结
鸿蒙生命周期不是理论知识,是用来解决BUG的实战技能。
只要你生命周期用对:
- 不会闪退
- 不会内存泄漏
- 不会重复请求
- 不会后台耗电
- 页面逻辑100%稳定
学鸿蒙,先吃透生命周期,比学10个UI组件更重要!
官方文档来源:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/app-lifecycle
需要更多鸿蒙入门干货、避坑技巧、实战模板,记得关注!