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));// 判断系统最近任务中是否包含etsclockfor (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.鸿蒙南向开发方向

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/576859.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Postman中参数填写方式!

Postman中参数填写和请求方法有关&#xff0c;一般接口用例请求方法GET与POST常用&#xff0c;所以主要是这两种请求方法请求参数填写 一、GET请求方法参数填写 1、直接在URL中填写请求参数,如直接在URL中填写&#xff1a; http://www.example.com:8089/userapi?unamelisi&…

机器学习之聚类算法、随机森林

文章目录 随机森林决策树基础特征值问题&#xff1f; 聚类算法 随机森林 决策树 基础 概念&#xff1a;从根节点一步步走到叶子节点&#xff08;决策&#xff09;&#xff1b; 组成&#xff1a;根节点第一个选择的节点&#xff1b;叶子节点最终的决策结果&#xff1b;非叶子…

基于CNN-RNN的动态手势识别系统实现与解析

一、环境配置 为了成功实现基于CNN-RNN的动态手势识别系统&#xff0c;你需要确保你的开发环境已经安装了以下必要的库和工具&#xff1a; Python&#xff1a;推荐使用Python 3.x版本&#xff0c;作为主要的编程语言。TensorFlow&#xff1a;深度学习框架&#xff0c;用于构建…

ensp中pc机访问不同网络的服务器

拓扑图如下&#xff0c;资源已上传 说明&#xff1a;pc通过2个路由访问server服务器 三条线路分别是192.168.1.0网段&#xff0c;192.168.2.0网段和192.168.3.0网段&#xff0c;在未配置的情况下&#xff0c;pc设备是访问不到server的 具体操作流程 第一&#xff1b;pc设备…

Go语言学习Day6:数组与切片

名人说&#xff1a;莫愁千里路&#xff0c;自有到来风。 ——钱珝 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 1. 数组① 什么是数组② 数组的声明③ 初始化数组的几种方式④ 遍历数组元素⑤ 数组为值类型⑥ 数…

自动发卡平台源码优化版,支持个人免签支付

源码下载地址&#xff1a;自动发卡平台源码优化版.zip 环境要求&#xff1a; php 8.0 v1.2.6◂ 1.修复店铺共享连接时异常问题 2024-03-13 23:54:20 v1.2.5 1.[新增]用户界面硬币增款扣款操作 2.[新增]前台对接库存信息显示 3.[新增]文件缓存工具类[FileCache] 4.[新增]库存同…

Yolov8-pose关键点检测:卷积魔改 | DCNv4更快收敛、更高速度、更高性能,效果秒杀DCNv3、DCNv2等 ,助力检测

💡💡💡本文独家改进:DCNv4更快收敛、更高速度、更高性能,完美和YOLOv8结合,助力涨点 DCNv4优势:(1) 去除空间聚合中的softmax归一化,以增强其动态性和表达能力;(2) 优化存储器访问以最小化冗余操作以加速。这些改进显著加快了收敛速度,并大幅提高了处理速度,DCN…

Java并查集详解(附Leetcode 547.省份数量讲解)

一、并查集概念 并查集是一种树型的数据结构&#xff0c;用于处理一些不相交集合的合并及查询问题。 并查集的思想是用一个数组表示了整片森林&#xff08;parent&#xff09;&#xff0c;树的根节点唯一标识了一个集合&#xff0c;我们只要找到了某个元素的的树根&#xff0c;…

Vue element-plus 导航栏 [el-menu]

导航栏 [el-menu] Menu 菜单 | Element Plus el-menu有很多属性和子标签&#xff0c;为网站提供导航功能的菜单。 常用标签&#xff1a; 它里面有两个子标签。el-menu-item&#xff0c;它其实就是el-menu每一个里面的item&#xff0c;item就是真实匹配到路由的每个栏目&#…

3.28学习总结

java 封装 封装体现了java的面向对象的特点,用户不用知道程序是如何运行的,只用按照所给的格式输入参数,便可得到对应的结果. 一个完整的封装需要每个实例变量都用private来修饰并拥有相应的public getter和setter方法. 代码 public class girl {private int age;public st…

MFC(一)搭建空项目

安装MFC支持库 创建空白桌面程序 项目相关设置 复制以下代码 // mfc.h #pragma once #include <afxwin.h>class MyApp : public CWinApp { public:virtual BOOL InitInstance(); };class MyFrame : public CFrameWnd { public:MyFrame();// 消息映射机制DECLARE_…

ctf.show_web10

本题重点&#xff1a;&#xff08;1&#xff09;php相关函数 &#xff1b;&#xff08;2&#xff09;会灵活运用 group by 和 with rollup&#xff1b; <?php $flag""; function replaceSpecialChar($strParam){ $regex "/(s…