HarmonyOS开发:生命周期详解

目录

前言

  • 生命周期的概念
  • HarmonyOS生命周期
  • 最后

前言

随着移动端操作系统的多样化发展,HarmonyOS作为华为推出的一款面向全场景的分布式操作系统,受到了业内外的广泛关注。其实HarmonyOS的设计和开发模式,与传统的移动端操作系统有着显著的区别,特别是在应用的生命周期管理上,它引入了新的设计理念来适应多种设备和使用场景。对于开发者而言,深入理解HarmonyOS的生命周期对于开发高效、稳定的应用至关重要,而且任何技术框架它的生命周期都是重中之重的。那么本文就来详细解析HarmonyOS中应用的生命周期,帮助大家更好地掌握其开发精髓,欢迎大家在评论区留言交流。

生命周期的概念

在软件开发中,生命周期指的是一个对象从创建到销毁的整个过程;在操作系统中,这通常指的是一个应用程序或进程从启动到结束的各个阶段。其实生命周期的概念,就是指一个对象的从产生到销毁的过程,也就是生命周期是指程序从创建、开始、暂停、唤起、停止、销毁、卸载的过程。不同框架之间的生命周期有所差异,但是大致过程是一样的。

对于HarmonyOS来讲,它的生命周期管理不仅关乎应用的性能和用户体验,还涉及到系统资源的合理分配和调度。这里分享一下HarmonyOS的生命周期管理特点:

  • 组件化:HarmonyOS采用组件化的设计,应用由多个独立的组件组成,每个组件都有自己的生命周期。
  • 并发性:支持多任务并发执行,各个组件可以独立运行,互不干扰。
  • 弹性:应用可以根据系统资源和用户需求灵活调整自己的状态。
    HarmonyOS生命周期

从严格意义上讲,HarmonyOS的生命周期分为三个部分:应用级生命周期、页面级生命周期、组件的生命周期。

一、应用级生命周期

先来分享一下HarmonyOS应用生命周期,根据官方内容,结合实际使用情况来说,在app.js中可以定义如下应用生命周期函数:

其实HarmonyOS应用级生命周期就是整个HarmonyOS应用(App)的生命周期,App() 函数是用来注册一个小程序的,接收一个object参数,必须在app.js中调用,App() 必须调用且只能调用一次,app.js中定义了几个应用级的生命周期函数,具体如下所示:

  • onCreate: 当应用创建时调用;
  • onShow: 当应用处于前台时触发;
  • onHide: 当应用处于后台时触发;
  • onDestroy: 当应用退出时触发;

具体的代码文件中展示应用级生命周期的各个生命周期,如下所示:

bash 复制代码
export default class EntryAbility extends UIAbility {
  onCreate(want, launchParam) {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
  }
  onShow(want, launchParam) {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onShow');
  }
  onHide(want, launchParam) {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onHide');
  }
  onDestroy() {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');
  }
}

二、页面级生命周期

再来分享一下页面级生命周期,根据官方内容,结合实际使用情况来说,在页面JS文件中可以定义如下页面生命周期函数:

HarmonyOS页面级生命周期,其实就是基于HarmonyOS页面(page)的生命周期。在每一个页面注册函数Page()的参数里面,定义的几个关于页面生命周期函数,具体如下所示:

  • onInit:页面数据初始化完成时触发,只触发一次;
  • onShow:页面显示时触发;
  • onReady:页面创建完成时触发,只触发一次;
  • onHide:页面消失时触发;
  • onDestroy:页面销毁时触发;
  • onBackPress:当用户点击返回按钮时触发;
  • onActive:页面激活时触发;
  • onInactive:页面暂停时触发;
  • onNewRequest:FA已经启动时收到新的请求后触发;

需要特别说明的是,页面A的生命周期接口的调用顺序,具体如下所示:

  • 打开页面A:onInit() -> onReady() -> onShow()
  • 在页面A打开页面B:onHide()
  • 从页面B返回页面A:onShow()
  • 退出页面A:onBackPress() -> onHide() -> onDestroy()
  • 页面隐藏到后台运行:onInactive() -> onHide()
  • 页面从后台运行恢复到前台:onShow() -> onActive()

具体的代码文件中展示页面生命周期的各个生命周期,如下所示:

bash 复制代码
export default class EntryAbility extends UIAbility {

  onInit(want, launchParam) {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onInit');
  }
  onReady(want, launchParam) {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onReady');
  }
  onShow(want, launchParam) {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onShow');
  }
  onHide(want, launchParam) {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onHide');
  }
  onDestroy() {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');
  }
  onBackPress(want, launchParam) {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackPress');
  }
  onActive(want, launchParam) {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onActive');
  }
  onInactive(want, launchParam) {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onInactive');
  }
  onNewRequest() {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onNewRequest');
  }
}

**注意:**当切换页面需要多次渲染数据改变状态的时候,可以在onShow中使用;当只需初始化一次的时候,可在onInit或者onReady中使用;当需要清除定时器时,可在onDestroy中使用。

页面生命周期执行的顺序是:onInit --> onShow --> onHide。

三、组件的生命周期

组件的生命周期,其实就是基于HarmonyOS封装的组件(component)的生命周期,也是页面和自定义组件生命周期。在分享组件的生命周期之前,先来看一下页面和自定义组件的关系:

页面,即应用的UI页面,可以由一个或者多个自定义组件组成;自定义组件就是@Component装饰的UI单元,可以组合多个系统组件实现UI的复用,可以调用组件的生命周期。

还有就是@Entry装饰的自定义组件为页面的入口组件,即页面的根节点,一个页面有且仅能有一个@Entry。需要注意的是,只有被@Entry装饰的组件才可以调用页面的生命周期。

在使用组件封装的时候,定义的几个关于组件生命周期函数,具体如下所示:

  • aboutToAppear:组件即将出现时回调该接口;
  • onDidBuild:组件build()函数执行完成之后回调该接口;
  • aboutToDisappear:aboutToDisappear函数在自定义组件析构销毁之前执行;
  • onPageShow:页面每次显示时触发一次,包括路由过程、应用进入前台等场景;
  • onPageHide:页面每次隐藏时触发一次,包括路由过程、应用进入后台等场景;
  • onBackPress:当用户点击返回按钮时触发;

但是这些生命周期函数根据装饰分为被@Entry装饰的组件和@Component装饰的自定义组件两种生命周期,具体如下所示:

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

  • onPageShow:页面每次显示时触发一次,包括路由过程、应用进入前台等场景;
  • onPageHide:页面每次隐藏时触发一次,包括路由过程、应用进入后台等场景;
  • onBackPress:当用户点击返回按钮时触发;
    这里展示一下被@Entry装饰的组件(页面)生命周期,具体如下所示:

根据上面的流程图可以看到,是从自定义组件的初始创建、重新渲染和删除来详细分解的。

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

  • aboutToAppear:组件即将出现时回调该接口,具体时机为在创建自定义组件的新实例后,在执行其build()函数之前执行;
  • onDidBuild:组件build()函数执行完成之后回调该接口,需要注意的是如果在onDidBuild函数中更改状态变量、使用animateTo等功能可能会导致不稳定的UI表现;
  • aboutToDisappear:aboutToDisappear函数在自定义组件析构销毁之前执行,不能在aboutToDisappear函数中改变状态变量,尤其是@Link变量的修改可能会导致应用程序行为不稳定;

四、小结

通过上文关于HarmonyOS生命周期的介绍,可以汇总以下几个流程,结合程序运行的生命周期先后执行次序来总结,具体如下所示:

1、打开HarmonyOS的生命周期执行次序

(App)onCreate --> (App)onShow --> (Page)onInit -->(Page)onReady --> (Page)onShow 。

2、当进入下一个页面的生命周期执行次序

(当前页面)onHide --> (下一个页面)onInit --> (下一个页面)onReady --> (下一个页面)onShow。

3、当返回上一个页面的生命周期执行次序

(当前页面)onHide --> (上一个页面)onShow。

4、当离开HarmonyOS的生命周期执行次序

(App)onHide。

最后

通过本文的介绍,想必大家对HarmonyOS的生命周期有了更深刻的了解和学习,其实HarmonyOS的生命周期管理是其系统架构的重要组成部分,它给我们开发者提供了丰富的控制手段来优化应用的性能和用户体验,只有通过深入理解HarmonyOS的生命周期,我们才可以更好地利用系统提供的能力,开发出适应多种设备和场景的高质量应用。随着HarmonyOS生态的不断成熟,我们有理由相信它将为开发者带来更多的机遇,我们应当紧跟技术发展的步伐,不断学习和实践,以期在HarmonyOS的广阔天地中探索和创新。最后,在未来的开发中,让我们携手HarmonyOS,共同开启移动开发的新篇章!

相关推荐
李游Leo1 小时前
自学记录HarmonyOS Next DRM API 13:构建安全的数字内容保护系统
安全·华为·harmonyos
李游Leo1 小时前
探索鸿蒙的蓝牙A2DP与访问API:从学习到实现的开发之旅
学习·华为·harmonyos
轻口味5 小时前
【每日学点鸿蒙知识】渐变效果、Web组件注册对象报错、深拷贝list、loadContent数据共享、半屏弹窗
前端·list·harmonyos
轻口味5 小时前
【每日学点鸿蒙知识】子窗口方向、RichEdit不居中、本地资源缓存给web、Json转对象丢失方法、监听状态变量数组中内容改变
前端·缓存·harmonyos
二流小码农5 小时前
鸿蒙开发:自定义一个英文键盘
android·ios·harmonyos
二流小码农5 小时前
鸿蒙开发:自定义一个股票代码选择键盘
android·ios·harmonyos
鸿蒙自习室6 小时前
鸿蒙UI开发——全局自定义弹窗实现
ui·华为·harmonyos·鸿蒙
塞尔维亚大汉7 小时前
【OpenHarmony】 鸿蒙 UI动画开发之ohos-svg
harmonyos·arkui
轻口味7 小时前
【每日学点鸿蒙知识】图片base64、最先hap包下载、RN获取定位、app安装、SNAPSHOT组件管理
华为·harmonyos