news 2026/8/31 22:45:17

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/8/31 0:19:47

赛马娘本地化补丁完整指南:5分钟实现游戏完美汉化

赛马娘本地化补丁完整指南:5分钟实现游戏完美汉化 【免费下载链接】umamusume-localify Localify "ウマ娘: Pretty Derby" DMM client 项目地址: https://gitcode.com/gh_mirrors/um/umamusume-localify 赛马娘本地化补丁是专为《赛马娘: Pretty D…

作者头像 李华
网站建设 2026/8/31 23:08:43

终极ComfyUI效率节点完整安装教程:5步实现AI绘画工作流革命

终极ComfyUI效率节点完整安装教程:5步实现AI绘画工作流革命 【免费下载链接】efficiency-nodes-comfyui A collection of ComfyUI custom nodes.- Awesome smart way to work with nodes! 项目地址: https://gitcode.com/gh_mirrors/eff/efficiency-nodes-comfyui…

作者头像 李华
网站建设 2026/8/31 15:01:37

【CMake 】CMake 中 add_executable 与 target_sources 详解

CMake 中 add_executable 与 target_sources 详解 📖 前言 在 CMake 构建系统中,add_executable 和 target_sources 是两个用于管理源文件的重要命令。理解它们的关系、区别和使用场景,对于编写高质量的 CMake 配置文件至关重要。本文将深入探…

作者头像 李华
网站建设 2026/8/31 20:25:48

2003-2021近全球农业气候干旱监测数据集(0.25度/逐月)

2003-2021近全球月度农业气候干旱监测数据集 一、数据介绍 全球干旱发生频率不断上升且严重程度日益加剧,这给农业和气候资源管理带来了严峻挑战,凸显了对全面干旱数据的迫切需求。为应对这一问题,我们推出了近全球农业气候干旱监测数据集。…

作者头像 李华