目录

应用生命周期概述

概述

当用户在执行应用启动、应用前后台切换、应用退出等操作时,应用的整体生命周期状态会随之发生变化。理解应用的生命周期有助于开发者在合适的时机进行资源申请与释放、业务状态管理等操作。本章节主要介绍应用的生命周期状态、应用生命周期与应用进程及应用组件(UIAbility、ExtensionAbility)的关系,以及如何监听应用生命周期状态的变化。

应用生命周期状态

[h2]应用生命周期与应用进程、应用组件的关系

[h2]应用生命周期状态变化

上述应用进程前后台的切换时机不包含2in1应用,2in1应用仅在启动时被系统切换到前台状态,退出时被系统切换到后台状态。

监听应用生命周期

[h2]监听应用的启动和退出

应用需要先申请ohos.permission.RUNNING_STATE_OBSERVER权限,然后使用on('applicationState')方法可以监听全部应用的状态;使用on('applicationState')方法可以监听指定应用的状态。通过实现ApplicationStateObserver接口中的onAppStarted()方法,可以监听应用的启动。通过实现ApplicationStateObserver接口中的onAppStopped()方法,可以监听应用的退出。

[h2]监听应用前后台变化

应用使用ApplicationContext的on('applicationStateChange')方法可以监听应用的前后台状态变化,当应用前后台切换时,可以收到相应回调函数的通知,从而执行一些依赖前后台的方法,或者进行应用前后台切换频率等数据统计。

以UIAbilityContext中的使用为例进行说明。

上述的回调事件均为异步回调,无严格的时序关系。

import { UIAbility, ApplicationStateChangeCallback } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';

const TAG = '[LifecycleAbility]';
const DOMAIN = 0xF811;

export default class LifecycleAbility extends UIAbility {
  onCreate() {
    let applicationStateChangeCallback: ApplicationStateChangeCallback = {
      onApplicationForeground() {
        hilog.info(DOMAIN, TAG, 'applicationStateChangeCallback onApplicationForeground');
      },
      onApplicationBackground() {
        hilog.info(DOMAIN, TAG, 'applicationStateChangeCallback onApplicationBackground');
      }
    }

    // 1.获取applicationContext
    let applicationContext = this.context.getApplicationContext();
    try {
      // 2.通过applicationContext注册应用前后台状态监听
      applicationContext.on('applicationStateChange', applicationStateChangeCallback);
    } catch (paramError) {
      hilog.error(DOMAIN, TAG, `error: ${(paramError as BusinessError).code}, ${(paramError as BusinessError).message}`);
    }
    hilog.info(DOMAIN, TAG, 'Register applicationStateChangeCallback');
  }
}

PC/2in1设备的应用模型特征

module.json5文件的deviceTypes仅声明支持PC/2in1设备的应用,其UIAbility的生命周期回调触发机制与其他设备存在差异。

  1. 当用户启动一个UIAbility时,系统会依次触发onCreate()、onWindowStageCreate()、onForeground()生命周期回调,完成组件创建、生命周期驱动等流程。

  2. 当用户进行应用间切换时,UIAbility会保持前台状态,系统不会触发onBackground()生命周期回调。

  3. 用户主动退出UIAbility和应用主动退出UIAbility时,系统才会触发onBackground()和onDestroy()生命周期回调,完成组件退出和销毁。

进程的生命周期与UIAbility组件的生命周期密切相关。由于UIAbility运行态长期处于前台状态,故进程长期处于前台状态,仅在进程正常退出过程中短暂处于后台状态。相应地,应用也长期处于前台状态,仅在应用正常退出过程中短暂处于后台状态。