HarmonyOS 应用开发之任务(Mission)管理场景介绍

任务(Mission)管理相关的基本概念如下:

  • AbilityRecord:系统服务侧管理一个UIAbility实例的最小单元,对应一个应用侧的UIAbility组件实例。系统服务侧管理UIAbility实例数量上限为512个。
  • MissionRecord:任务管理的最小单元。一个MissionRecord中仅有一个AbilityRecord,即一个UIAbility组件实例对应一个单独的任务。
  • MissionList:一个从桌面开始启动的任务列表,记录了任务之间的启动关系,下一个任务由上一个任务启动,最底部的任务由桌面启动,这里称之为任务链。
  • MissionListManager:系统任务管理模块,内部维护了当前所有的任务链,与最近任务列表保持一致。

图1 任务管理示意图

任务的管理由系统应用(如桌面应用)负责,三方应用无法管理任务。用户通过最近任务列表进行任务的相关交互。当创建任务后,用户可以对最近任务列表进行如下操作:

  • 删除一个指定的任务。

  • 加锁或解锁一个指定的任务(加锁后的任务在清理所有任务时不会被清理)。

  • 清理最近任务列表中的所有任务。

  • 将一个指定的任务切换到前台。

一个UIAbility实例对应一个单独的任务,因此应用调用startAbility() 方法启动一个UIAbility时,就是创建了一个任务。

  1. 桌面应用调用 missionManager 的接口管理任务,需要申请ohos.permission.MANAGE_MISSIONS权限,配置方式请参见 申请应用权限 。

  2. 利用missionManager进行任务管理(监听任务变化、获取任务信息、获取任务快照、清理任务、任务加锁/解锁等)。

import missionManager from '@ohos.app.ability.missionManager';
import { BusinessError } from '@ohos.base';
import image from '@ohos.multimedia.image';
import promptAction from '@ohos.promptAction';
import Logger from '../utils/Logger';

const TAG: string = 'TaskManager';

private listenerId: number = 0;
private missionId: number = 0;
private listener: missionManager.MissionListener = {
  // 任务创建
  onMissionCreated: (mission: number) => {
    Logger.info(TAG, '--------onMissionCreated-------');
  },
  // 任务销毁
  onMissionDestroyed: (mission: number) => {
    Logger.info(TAG, '--------onMissionDestroyed-------');
  },
  // 任务快照变化
  onMissionSnapshotChanged: (mission: number) => {
    Logger.info(TAG, '--------onMissionSnapshotChanged-------');
  },
  // 任务被移动到前台
  onMissionMovedToFront: (mission: number) => {
    Logger.info(TAG, '--------onMissionMovedToFront-------');
  },
  // 任务图标变化
  onMissionIconUpdated: (mission: number, icon: image.PixelMap) => {
    Logger.info(TAG, '--------onMissionIconUpdated-------');
  },
  // 任务名称变化
  onMissionLabelUpdated: (mission: number) => {
    Logger.info(TAG, '--------onMissionLabelUpdated-------');
  },
  // 任务实例被关闭
  onMissionClosed: (mission: number) => {
    Logger.info(TAG, '--------onMissionClosed-------');
  }
};

// 1.注册任务变化通知
this.listenerId = missionManager.on('mission', this.listener);
promptAction.showToast({
  message: $r('app.string.register_success_toast')
});
Logger.info(TAG, `missionManager.on success, listenerId = ${this.listenerId}`);

// 2.获取系统最近20个任务
missionManager.getMissionInfos('', 20, (error: BusinessError, missions: Array<missionManager.MissionInfo>) => {
  Logger.info(TAG, 'getMissionInfos is called, error = ' + JSON.stringify(error));
  Logger.info(TAG, 'size = ' + missions.length);
  Logger.info(TAG, 'missions = ' + JSON.stringify(missions));
  
  // 判断系统最近任务中是否包含etsclock
  for (let i = 0;i < missions.length; i++) {
    if (missions[i].want.bundleName === 'ohos.samples.etsclock') {
      promptAction.showToast({
        message: $r('app.string.obtain_success_toast')
      });
      Logger.info(TAG, `getMissionInfos.find etsclock, missionId  = ${missions[i].missionId}`);
      this.missionId = missions[i].missionId;
      return;
    }
  }
  promptAction.showToast({
    message: $r('app.string.obtain_failed_toast')
  });
});

// 3.获取单个任务的详细信息()
missionManager.getMissionInfo('', this.missionId).then((data: missionManager.MissionInfo) => {
  promptAction.showToast({
    message: JSON.stringify(data.want.bundleName)
  });
  Logger.info(TAG, `getMissionInfo successfully. Data: ${JSON.stringify(data)}`);
}).catch((error: BusinessError) => {
  Logger.error(TAG, `getMissionInfo failed. Cause: ${error.message}`);
});

// 4.获取任务快照
missionManager.getMissionSnapShot('', this.missionId, (error: BusinessError, snapshot: missionManager.MissionSnapshot) => {
  if (error === null) {
    promptAction.showToast({
      message: $r('app.string.obtain_snapshot_success_toast')
    });
  }
  Logger.info(TAG, 'getMissionSnapShot is called, error = ' + JSON.stringify(error));
  Logger.info(TAG, 'bundleName = ' + snapshot.ability.bundleName);
})

// 5.获取低分辨任务快照
missionManager.getLowResolutionMissionSnapShot('', this.missionId, (error: BusinessError, snapshot: missionManager.MissionSnapshot) => {
  if (error === null) {
    promptAction.showToast({
      message: $r('app.string.obtain_low_snapshot_success_toast')
    });
  }
  Logger.info(TAG, 'getLowResolutionMissionSnapShot is called, error = ' + JSON.stringify(error));
  Logger.info(TAG, 'bundleName = ' + snapshot.ability.bundleName);
})

// 6-1 加锁任务
missionManager.lockMission(this.missionId).then(() => {
  promptAction.showToast({
    message: $r('app.string.lock_success_toast')
  });
  Logger.info(TAG, 'lockMission is called ');
});

// 6-2 解锁任务
missionManager.unlockMission(this.missionId).then(() => {
  promptAction.showToast({
    message: $r('app.string.unlock_success_toast')
  });
  Logger.info(TAG, 'unlockMission is called ');
});

// 7.把任务切到前台
missionManager.moveMissionToFront(this.missionId).then(() => {
  Logger.info(TAG, 'moveMissionToFront is called ');
});

// 8.删除单个任务
missionManager.clearMission(this.missionId).then(() => {
  promptAction.showToast({
    message: $r('app.string.delete_success_toast')
  });
  Logger.info(TAG, 'clearMission is called ');
});

// 9.删除全部任务
missionManager.clearAllMissions().catch((err: BusinessError) => {
  Logger.info(TAG, `${err.code}`);
});

// 10.解注册任务变化通知
missionManager.off('mission', this.listenerId, (error: BusinessError) => {
  if (error === null) {
    promptAction.showToast({
      message: $r('app.string.unregister_success_toast')
    });
  }
  Logger.info(TAG, 'unregisterMissionListener');
})

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

相关推荐

  1. HarmonyOs开发——ArkTs基础知识介绍

    2024-03-30 04:54:06       32 阅读
  2. 鸿蒙(HarmonyOS)应用开发——管理组件状态

    2024-03-30 04:54:06       38 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-30 04:54:06       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-30 04:54:06       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-30 04:54:06       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-30 04:54:06       18 阅读

热门阅读

  1. 设计模式之单例模式

    2024-03-30 04:54:06       19 阅读
  2. R语言数据分析基础(三)

    2024-03-30 04:54:06       19 阅读
  3. 双检索单例模式

    2024-03-30 04:54:06       17 阅读
  4. pytorch | pytorch常用的乘法运算

    2024-03-30 04:54:06       19 阅读
  5. rust - 使用log4rs打印日志

    2024-03-30 04:54:06       22 阅读
  6. Codeforces Round 806 (Div. 4)

    2024-03-30 04:54:06       20 阅读
  7. OpenCV的高级应用

    2024-03-30 04:54:06       21 阅读