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

【鸿蒙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回调中,会触发获焦的事件回调,可以进行设置消息应用的背景颜色、高亮等操作。

typescript 复制代码
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控制台上的日志,截图如下:

    日志内容:

    shell 复制代码
    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. 当在手机模拟器上鼠标向上滑动列出最近打开应用的列表后,找到我们的应用程序,如下截图所示:

    然后点击截图上的删除按钮其删除,此时查看控制台日志,内容如下:

    shell 复制代码
    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加入符合实际的业务代码呢?感兴趣的读者朋友可以尝试下在这些函数加上业务代码试试,看看这些函数是否可以正常运行呢?欢迎大家的留言,我们在留言区进行讨论。

相关推荐
梦想不只是梦与想10 小时前
鸿蒙 测试工具:DevEco Testing(一)
测试工具·harmonyos·testing
大锅盖112 小时前
Web 工单要调用相机,第一步不是打开取景框,而是建立能力门禁
前端·数码相机·harmonyos
贾伟康16 小时前
【华夏二十四节气|07】HarmonyOS 6.0.2(22) ArkTS 节气搜索实战:多字段匹配与四态闭环
移动开发·harmonyos·arkts·arkui·本地搜索
大龄秃头程序员17 小时前
Flutter 项目鸿蒙适配实战:从环境搭建到多环境打包全指南
harmonyos
贾伟康18 小时前
【万能转换器|18】HarmonyOS ArkTS 权限与隐私实战:让 module.json5、功能说明和拒绝路径一致
移动开发·harmonyos·arkts·权限管理·隐私合规
贾伟康18 小时前
【万能转换器|19】HarmonyOS ArkTS 回归测试实战:覆盖启动、空数据、异常输入和重复点击
软件测试·移动开发·harmonyos·arkts·回归测试
UnicornIT20 小时前
【HarmonyOS】时间管理类APP:做成“自适应“
ui·华为·harmonyos·鸿蒙
less_1213820 小时前
HarmonyOS WPS Open SDK:不落地、水印与功能开关的合规打开策略
华为·harmonyos·wps
贾伟康21 小时前
【万能转换器|20】HarmonyOS ArkTS AppGallery 发布复查实战:核对包名、版本、设备、素材和离线声明
移动开发·harmonyos·arkts·appgallery·应用发布
OH_TPC1 天前
HarmonyOS APP开发---“滤镜大师“图像处理App,需要用到这个库
java·图像处理·华为·harmonyos·鸿蒙