【鸿蒙HarmonyOS NEXT】UIAbility的生命周期

一、环境说明

  1. DevEco Studio 版本:
    在这里插入图片描述

  2. API版本:以12为主
    在这里插入图片描述

二、UIAbility的生命周期

概念: HarmonyOS中的UIAbility是一种包含用户界面的应用组件,主要用于与用户进行交互,并且是系统调度基本单元,为应用提供窗口在其中绘制界面

UIAbility是HarmonyOS系统中用于构建用户界面的基本组件之一,负责处理应用程序界面的显示和交互。

作用: 每个UIAbility实例都对应于一个最近任务列表中的任务,可以独立展示、交互和管理数据。一个应用可以包含一个或多个UIAbility,每个UIAbility可以对应多个页面,建议将独立的功能模块放到一个UIAbility中,以多页面的形式呈现。

UIAbility生命周期图
在这里插入图片描述

UIAbility的生命周期
包括Create、Foreground、Background、Destroy四个主要状态,以及WindowStageCreate和WindowStageDestroy两个与窗口管理相关的回调

Create状态:在UIAbility实例创建时触发,系统会调用onCreate回调。在此回调中,可以进行初始化操作,如变量定义、资源加载等。例如用户打开电池管理应用,在应用加载过程中,在UI页面可见之前,可以在onCreate回调中读取当前系统的电量情况,用于后续的UI页面展示。

WindowStageCreate状态:在UIAbility实例创建完成之后,进入Foreground之前,系统会创建一个WindowStage。WindowStage是本地窗口管理器,用于管理窗口相关的内容,如获焦/失焦、可见/不可见等。可以在onWindowStageCreate回调中设置UI页面加载WindowStage的事件订阅。在onWindowStageCreate(windowStage)中通过loadContent接口设置应用要加载的页面。例如用户打开游戏应用,正在打游戏的时候,有一个消息通知,打开消息,消息会以弹窗的形式弹出在游戏应用的上方,此时,游戏应用就从获焦切换到了失焦状态,消息应用切换到了获焦状态。对于消息应用,在onWindowStageCreate回调中,会触发获焦的事件回调,可以进行设置消息应用的背景颜色、高亮等操作。

import UIAbility from '@ohos.app.ability.UIAbility';
import window from '@ohos.window';

export default class EntryAbility extends UIAbility {
    ...
    onWindowStageCreate(windowStage: window.WindowStage) {
        // 设置UI页面加载
        // 设置WindowStage的事件订阅(获焦/失焦、可见/不可见)
        ...
        windowStage.loadContent('pages/Index', (err, data) => {
            ...
        });
    }
    ...
}

Foreground状态: 在UIAbility的UI界面可见之前触发,对应于onForeground回调。可以在此回调中申请系统需要的资源,或者重新申请在Background状态中释放的资源。例如用户打开地图应用查看当前地理位置的时候,假设地图应用已获得用户的定位权限授权。在UI页面显示之前,可以在onForeground回调中打开定位功能,从而获取到当前的位置信息。

Background状态:在UIAbility的UI界面完全不可见之后触发,对应于onBackground回调。可以在此回调中释放UI界面不可见时无用的资源,或者执行较为耗时的操作,如状态保存等。当地图应用切换到后台状态,可以在onBackground回调中停止定位功能,以节省系统的资源消耗。

WindowStageDestroy状态:在UIAbility实例销毁之前触发,对应于onWindowStageDestroy回调。可以在此回调中释放UI页面资源,如注销在WindowStageCreate中设置的订阅事件。

Destroy状态:在UIAbility销毁时触发,可以在onDestroy回调中进行系统资源的释放、数据的保存等操作。例如用户使用应用的程序退出功能,会调用UIAbilityContext的terminalSelf()方法,从而完成UIAbility销毁。或者用户使用最近任务列表关闭该UIAbility实例时,也会完成UIAbility的销毁。

三、示例代码加以说明

沿用【鸿蒙HarmonyOS NEXT】页面之间相互传递参数博文中的代码,进行测试。
测试步骤如下:

  1. 打开模拟器,并将代码部署到模拟器上,当模拟器正常运行代码后,查看DevEco Studio控制台上的日志,截图如下:
    在这里插入图片描述
    日志内容:

    A03d00/JSAPP                    com.suben...arameter  I     Callee constructor is OK string
    A03d00/JSAPP                    com.suben...arameter  I     Ability::constructor callee is object [object Object]
    A00000/testTag                  com.suben...arameter  I     Ability onCreate
    A00000/testTag                  com.suben...arameter  I     Ability onWindowStageCreate
    A00000/testTag                  com.suben...arameter  I     Ability onForeground
    A00000/testTag                  com.suben...arameter  I     Succeeded in loading the content.
    
  2. 点击手机模拟器上应用的登录按钮,跳转到了首页,然后再从首页返回登录页,查看控制台日志,内容如截图橙色框所示:
    在这里插入图片描述
    注意:上述代码是基于单UIAbility多页面开发的应用,因当前UIAbility仍处于前台的状态。

  3. 按住手机模拟器右边的圆形框返回手机模拟器屏幕,让该应用退到后台,再查看控制台日志的打印情况,具体如下:
    在这里插入图片描述
    控制台日志截图如下:
    在这里插入图片描述
    此时onBackground函数被调用。

  4. 当在手机模拟器上鼠标向上滑动列出最近打开应用的列表后,找到我们的应用程序,如下截图所示:
    在这里插入图片描述
    然后点击截图上的删除按钮其删除,此时查看控制台日志,内容如下:

    A00000/testTag                  com.suben...arameter  I     Ability onBackground
    A00000/testTag                  com.suben...arameter  I     Ability onWindowStageDestroy
    A00000/testTag                  com.suben...arameter  I     Ability onDestroy
    

    此时onBackground函数被调用。如截图所示:
    在这里插入图片描述

四、小结

通过上述的说明和示例演示,相信大家已经很清楚UIAbility的生命周期了。细心的读者朋友可能会问,在真实的开发过程中该如何在这些诸如onCreate、onForeground、onBackground、onDestroy四个状态函数和两个窗口管理函数onWindowStageCreate和onWindowStageDestroy加入符合实际的业务代码呢?感兴趣的读者朋友可以尝试下在这些函数加上业务代码试试,看看这些函数是否可以正常运行呢?欢迎大家的留言,我们在留言区进行讨论。

  • 14
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

若兰幽竹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值