目录

UIAbility组件各场景生命周期及监听

问题现象

应用不同的启动方式,Ability的生命周期会稍有差异。在应用冷启、切后台等操作中Ability生命周期是什么状态?要如何监听生命周期变化?

背景知识

UIAbility组件的核心生命周期回调包括onCreate、onForeground、onBackground、onDestroy。UIAbility的生命周期示意图如下:

解决方案

常见FAQ

Q:onDestroy回调中是否可以做异步操作?

A:参考onDestroy文档,提供了Promise异步回调示例。

Q:App从前台进入后台,先后触发哪些生命周期?

A:针对Ability会触发onBackground,针对page页面会触发onPageHide,参考onPageHide。

Q:任务中心上划终止App后,除了EntryAbility之外,其他的Ability(例如处理消息推送的PushMessageAbility)会一起销毁吗?

A:当应用有多个Ability时,应用从任务中心上划终止运行时不会销毁所有的Ability,如果需要一并销毁其余的Ability,可以把对应的Ability的上下文对象context保存在AppStorage当中,在EntryAbility当中的onDestroy回调方法里面获取另外的Ability的context,再执行其terminateSelf方法。

onDestroy(): void {
  const pushMessageContext = AppStorage.get('pushMessageContext') as common.UIAbilityContext
  if (pushMessageContext) {
    pushMessageContext.terminateSelf().catch((error: BusinessError) => {
      console.error(`PushMessageAbility terminate error. code: ${error.code}, message: ${error.message}`)
    })
  }
}