首页 > 编程笔记 > 通用技能 阅读:1

鸿蒙UlAbility组件的生命周期(非常详细)

UIAbility 组件是一种包含 UI 的应用组件,主要用于和用户交互。

UIAbility 的生命周期包括 Create、Foreground、Background、Destroy 四个状态,如下图所示。


图 1 UIAbility 的生命周期

接下来详细讲解每个状态的特性。

UIAbility Create状态

在应用加载过程中,UIAbility 实例创建完成时触发 Create 状态,系统会调用 onCreate() 回调。可以在该回调中进行页面初始化操作,例如变量定义资源加载等,用于后续的 UI 展示。


图 2 打开EntryAbility.ts文件

如上图所示,打开 EntryAbility.ts 文件,我们在 onCreate 函数中打印一段话,运行时会发现这段话会在日志内显示。通常情况下我们会在 Create 状态下进行一些授权操作,比如初始化数据等。

【实例】在创建 UIAbility 实例时,使用 AppStorage 存储一些数据,在页面中读取并展示,代码及效果如下图所示。


图 3 使用AppStorage存储数据并展示

UIAbility WindowStage

UIAbility 实例创建完成之后,在进入 Foreground 之前,系统会创建一个 WindowStage。

WindowStage 创建完成后会进入 onWindowStageCreate() 回调,可以在该回调中设置 UI 加载、WindowStage 的事件订阅等,如下图所示。


图 4 WindowStage

在 onWindowStageCreate() 回调中通过 loadContent() 方法设置应用要加载的页面,并根据需要调用 on('windowStageEvent') 方法订阅 WindowStage 的事件(获焦/失焦、可见/不可见)。


图 5 在windowStage.loadContent中设置需要加载的页面

如上图所示,我们在 windowStage.on 中设置当前窗口的状态,同时在 windowStage.loadContent 中设置需要加载的页面,也就是入口文件。

案例运行效果如下图所示:


图 6 案例运行效果

在 UIAbility 实例销毁之前,会先进入 onWindowStageDestroy() 回调,可以在该回调中释放 UI 资源,如下图所示。


图 7 在onWindowStageDestroy()回调中释放UI资源

UIAbility Foreground和Background状态

UIAbility 实例在前后台切换时触发 Foreground 和 Background 状态,分别对应 onForeground() 和 onBackground() 回调。

onForeground() 在 UI 可见前触发,用于申请资源或重新申请释放的资源;而 onBackground() 在 UI 完全不可见后触发,用于释放无用资源和执行耗时操作,如状态保存。

例如,应用可在 onForeground() 回调中开启定位功能以获取用户位置信息。

UIAbility Destroy状态

Destroy 状态在 UIAbility 实例被销毁时触发,onDestroy() 回调用于释放系统资源和保存的数据。例如,用户通过最近任务列表关闭 UIAbility 实例时触发 Destroy 状态。

下图展示了 UIAbility 组件不同的生命周期的调用顺序:打开应用→后台运行→删除应用。


图 8 UIAbility组件不同的生命周期的调用顺序

当应用的 UIAbility 实例已创建,且 UIAbility 配置为 singleton 启动模式时,再次调用 startAbility() 方法启动该 UIAbility 实例,只会进入该 UIAbility 的 onNewWant() 回调,不会进入其 onCreate() 和 onWindowStageCreate() 回调。

相关文章