news 2026/5/7 18:21:27

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/5/7 15:29:52

最小二乘问题详解4:非线性最小二乘

1. 引言在论述最小二乘问题的时候,很多文章都喜欢用拟合直线来举例,但是在现实中像拟合直线这样的线性最小二乘问题往往不是常态,现实世界中更多是像投影成像这种非线性最小二乘问题。在本文中,我们就讲解一下非线性最小二乘问题。…

作者头像 李华
网站建设 2026/4/18 9:31:51

不是所有旅行都要有意义,舒服才是答案

不晓得从什么时候开始,深度游成了旅游领域的热门词语,大家都不想匆匆地游览,就希望好好感受城市的“真实灵魂。认真思索一番,所谓深度或许算是一个虚假概念我们带着自身的学识,、成见还有期待出发,所看到的…

作者头像 李华
网站建设 2026/5/5 4:15:29

基于SpringBoot+Vue的大学生就业服务平台的设计与实现

一、前言 大学生就业服务平台管理系统按照操作主体分为管理员和用户。管理员的功能包括学生档案管理、字典管理、试卷管理、试卷选题管理、试题表管理、考试记录表管理、答题详情表管理、错题表管理、法律法规管理、法律法规收藏管理、法律法规留言管理、就业分析管理、论坛管理…

作者头像 李华
网站建设 2026/4/18 22:09:24

从零开始掌握LibreCAD:免费开源CAD软件的完全使用指南

从零开始掌握LibreCAD:免费开源CAD软件的完全使用指南 【免费下载链接】LibreCAD LibreCAD is a cross-platform 2D CAD program written in C14 using the Qt framework. It can read DXF and DWG files and can write DXF, PDF and SVG files. The user interface…

作者头像 李华
网站建设 2026/5/5 13:24:43

终极指南:免费在Mac上读写NTFS磁盘的简单方法

终极指南:免费在Mac上读写NTFS磁盘的简单方法 【免费下载链接】ntfstool A ntfs tool for mac 项目地址: https://gitcode.com/gh_mirrors/nt/ntfstool 还在为Mac电脑无法写入NTFS格式的移动硬盘而头疼吗?NTFSTool这款开源工具正是为你量身定制的…

作者头像 李华