目录

控制应用退至后台或直接销毁

问题现象

如何通过API控制应用退至后台或者直接销毁应用?

背景知识

解决方案

Index.ets:实现应用退至后台及销毁应用逻辑。

import { common } from '@kit.AbilityKit';

@Entry
@Component
struct Index {
  build() {
    Column({ space: 16 }) {
      Button('退至后台')
        .onClick(() => {
          // 获取Context
          let context = this.getUIContext().getHostContext() as common.UIAbilityContext;
          // 通过Context获取windowStage
          let windowStage = context.windowStage;
          // 通过windowStage获取主窗口
          let mainWindow = windowStage.getMainWindowSync();
          // 将主窗口最小化
          mainWindow.minimize();
        });
      Button('销毁应用')
        .onClick(() => {
          // 获取Context
          let context = this.getUIContext().getHostContext() as common.UIAbilityContext;
          // 通过Context获取销毁应用
          context.terminateSelf()
            .then(() => {
              // 执行正常业务
              console.info('terminateSelf succeed');
            })
            .catch((err: BusinessError) => {
              // 处理业务逻辑错误
              console.error(`terminateSelf failed, code is ${err.code}, message is ${err.message}`);
            });
        });
    }
    .width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center);
  }
}

module.json5:将removeMissionAfterTerminate字段取值配置为true。

"abilities": [
  {
    // 清除销毁应用快照
    "removeMissionAfterTerminate": true,
    "name": "EntryAbility",
    "srcEntry": "./ets/entryability/EntryAbility.ets",
    "description": "$string:EntryAbility_desc",
    "icon": "$media:layered_image",
    "label": "$string:EntryAbility_label",
    "startWindowIcon": "$media:startIcon",
    "startWindowBackground": "$color:start_window_background",
    "exported": true,
    "skills": [
      {
        "entities": [
          "entity.system.home"
        ],
        "actions": [
          "ohos.want.action.home"
        ]
      }
    ]
  }
],

常见FAQ

Q:锁屏的时候应用会收到minimize设计目的是什么?

A:锁屏后应用退后台会降低设备功耗问题,应用在后台CPU不会调度,可以延长设备续航时间。