news 2026/9/2 8:42:59

HarmonyOS应用开发——生命周期

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HarmonyOS应用开发——生命周期

1.组件-生命周期

自定义组件:@Component装饰的UI单元,可以组合多个系统组件实现UI的复用。

页面:即应用的UI页面。可以由一个或者多个自定义组件组成,@Entry装饰的自定义组件为页面的入口组件,即页面的根节点,一个页面有且仅能有一个@Entry。只有被@Entry装饰的组件才可以调用页面的生命周期。

带@Entry修饰符的组件:

页面生命周期,即被@Entry装饰的组件生命周期,提供以下生命周期接口:

(1)onPageShow:页面每次显示时触发。

(2)onPageHide:页面每次隐藏时触发一次。

(3)onBackPress:当用户点击返回按钮时触发。

自定义组件生命周期:

组件生命周期,即一般用@Component装饰的自定义组件的生命周期,提供以下生命周期接口:

(1)aboutToAppear:组件即将出现时回调该接口,具体时机为在创建自定义组件的新实例后,在执行其build()函数之前执行。

(2)aboutToDisappear:在自定义组件即将析构销毁时执行。

因为@Entry 也是@Component组件,所以页面组件同时拥有自定义组件的生命周期。

在Index.ets文件中测试一下,代码如下:

@Entry

@Component

structIndex{

@Statemessage:string='Hello World';

aboutToAppear(){

console.log("页面初始化")

}

onPageShow(){

console.log("页面显示")

}

onPageHide(){

console.log("页面隐藏")

}

aboutToDisAppear(){

// 清理定时器

console.log("页面销毁")

}

onBackPress(){

console.log("后退键")

}

build(){

RelativeContainer(){

Text(this.message)

.id('HelloWorld')

.fontSize($r('app.float.page_text_font_size'))

.fontWeight(FontWeight.Bold)

.alignRules({

center:{anchor:'__container__',align:VerticalAlign.Center},

middle:{anchor:'__container__',align:HorizontalAlign.Center}

})

.onClick(()=>{

this.message='Welcome';

})

}

.height('100%')

.width('100%')

}

}

实现效果,如图所示。

带@Entry的页面组件:拥有页面进入,页面销毁,页面显示,页面隐藏,页面返回的生命周期。

@Component自定义组件:拥有组件进入、组件销毁生命周期。

2.UIAbility-生命周期

UIAbility的生命周期包括Create、Foreground、Background、Destroy四个状态,如图所示。

(1)onCreate:Ability创建时回调,执行初始化业务逻辑操作。

(2)onDestory:Ability生命周期回调,在销毁时回调,执行资源清理等操作。

(3)onWindowStageCreate:当WindowStage创建后调用。

(3)onWindowStageDestory:当WindowStage销毁后调用。

(4)onForeground:Ability生命周期回调,当应用从后台转到前台时触发。

(5)onBackground:Ability生命周期回调,当应用从前台转到后台时触发

UIAbility相当于我们应用中的一个任务,我们可以把自己的app想象成一个UIAbility,但是当项目越来越大,需要扩展和分担业务的时候,可以采取多个。

3.Ability跳转

Stage模型:

UIAbility组件是系统调度的基本单元,为应用提供绘制界面的窗口;一个UIAbility组件中可以通过多个页面来实现一个功能模块;每一个UIAbility组件实例,都对应于一个最近任务列表中的任务。

当我们项目中拆解多个任务的时候,可以通过新建多个Ability的方式来进行任务的拆解。

比如,我们支付的之后想新开一个任务去专门处理这件事,就可以采用拉起一个新的Ability来实现。

新建一个支付Ablility – PayAbility,如图所示。

新建PayAbility对应的跳转的支付页面 PayIndex.ets。

@Entry

@Component

structPayIndex{

build(){

Row(){

Column({space:15}){

Text("支付Ability")

.fontSize(40)

.fontColor(Color.Red)

Button("支付")

.width('100%')

}

}

.height('100%')

.padding(20)

}

}

实现效果,如图所示。

新建一个主页Page- MainPage用来跳转到支付Ability。

@Entry

@Component

structMainPage{

build(){

Row(){

Column({space:15}){

Text("主Ability")

.fontSize(50)

Button("去支付")

.width('100%')

}

}

.height('100%')

.padding(20)

}

}

实现效果,如图所示。

ability的拉起必须通过模拟器-所以把我们主Ability的启动页设置为我们刚刚新建的主页。

修改EntryAbility.ets文件。

修改PayAbility.ets文件。

接下来,我们点击去支付按钮的时候 要拉起支付PayAbility。

我们采用当前Ability的上下文来实现,参考官方文档。

使用Context上下文拉起Ability。

这里我们需要准备一个参数Want。

let want: Want = {

'deviceId': '', // deviceId为空表示本设备

'bundleName': '包名',

'abilityName': 'abilityName'

};

拉起Ability,修改MainPage.ets文件,代码如下:

import{common,Want}from'@kit.AbilityKit'

@Entry

@Component

structMainPage{

build(){

Row(){

Column({space:15}){

Text("主Ability")

.fontSize(50)

Button("去支付")

.width('100%')

.onClick(async()=>{

try{

letwant:Want={

'deviceId':'',// deviceId为空表示本设备

'bundleName':'com.xunfang.myapplication',

'abilityName':'PayAbility'

};

await(getContext(this)ascommon.UIAbilityContext).startAbility(want)

}catch(error){

}

})

}

}

.height('100%')

.padding(20)

}

}

实现效果,如图所示。

->

此时是2个Ability页面。

这里点击“去支付”(MainPage.ets),拉起另一个Ability页面(PayIndex.ets)。

欢迎加入课程班级,考取鸿蒙认证:

https://developer.huawei.com/consumer/cn/training/classDetail/d43582bb30b34f548c16c127cb3be104?type=1?ha_source=hmosclass&ha_sourceId=89000248

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 23:16:56

基于SpringBoot+Vue的信息化在线教学平台的设计与实现

前言 本信息化在线教学平台有管理员功能有个人中心,学生信息管理,教师信息管理,教学信息管理,学生成绩管理,留言板管理,系统管理等。教师可以对学生成绩进行管理和留言回复。学生可以在线考试和留言。因而…

作者头像 李华
网站建设 2026/9/2 21:40:20

鼠标性能测试神器:5分钟快速检测你的设备真实表现

鼠标性能测试神器:5分钟快速检测你的设备真实表现 【免费下载链接】MouseTester 项目地址: https://gitcode.com/gh_mirrors/mo/MouseTester 你是否曾在激烈的游戏中感到瞄准不够精准?或在精细的设计工作中发现光标移动不够流畅?这些…

作者头像 李华
网站建设 2026/9/1 9:18:54

DeepSeek-VL2:重塑零售业决策的5大智能场景与3步落地路径

DeepSeek-VL2:重塑零售业决策的5大智能场景与3步落地路径 【免费下载链接】deepseek-vl2 探索视觉与语言融合新境界的DeepSeek-VL2,以其先进的Mixture-of-Experts架构,实现图像理解与文本生成的飞跃,适用于视觉问答、文档解析等多…

作者头像 李华
网站建设 2026/9/3 1:01:23

AI行业应用深度解析:从金融到制造业的落地实践

引言:AI赋能的行业革命人工智能正以前所未有的速度渗透到各行业核心业务流程中,从自动化到智能化,从辅助决策到自主执行。本报告将深入分析AI在金融、医疗、教育、制造业四大关键领域的落地案例,配备详细的技术实现、流程图、Prom…

作者头像 李华
网站建设 2026/9/2 15:09:07

企业合规必备|2025 算法备案实操指南:避坑要点 + 未合规风险

某物流科技公司优化智能调度算法后,因未完成备案被要求整改,同时面临相应处罚;某资讯平台因备案流程滞后,推荐功能暂停服务数日,用户活跃度出现明显下降……​ 2025 年,算法备案已成为互联网相关企业的合规…

作者头像 李华