任务(Mission)管理场景介绍
任务(Mission)管理相关的基本概念如下:
- AbilityRecord:系统服务侧管理一个UIAbility实例的最小单元,对应一个应用侧的UIAbility组件实例。系统服务侧管理UIAbility实例数量上限为512个。
- MissionRecord:任务管理的最小单元。一个MissionRecord中仅有一个AbilityRecord,即一个UIAbility组件实例对应一个单独的任务。
- MissionList:一个从桌面开始启动的任务列表,记录了任务之间的启动关系,下一个任务由上一个任务启动,最底部的任务由桌面启动,这里称之为任务链。
- MissionListManager:系统任务管理模块,内部维护了当前所有的任务链,与最近任务列表保持一致。
图1 任务管理示意图
任务的管理由系统应用(如桌面应用)负责,三方应用无法管理任务。用户通过最近任务列表进行任务的相关交互。当创建任务后,用户可以对最近任务列表进行如下操作:
- 删除一个指定的任务。
- 加锁或解锁一个指定的任务(加锁后的任务在清理所有任务时不会被清理)。
- 清理最近任务列表中的所有任务。
- 将一个指定的任务切换到前台。
一个UIAbility实例对应一个单独的任务,因此应用调用[startAbility()
]方法启动一个UIAbility时,就是创建了一个任务。
桌面应用调用[missionManager]的接口管理任务,需要申请
ohos.permission.MANAGE_MISSIONS
权限,配置方式请参见[申请应用权限]。利用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 hilog from '@ohos.hilog'; const TAG: string = 'TaskManager'; const DOMAIN_NUMBER: number = 0xFF00;
private listenerId: number = 0; private missionId: number = 0; private listener: missionManager.MissionListener = { // 任务创建 onMissionCreated: (mission: number) = > { hilog.info(DOMAIN_NUMBER, TAG, '--------onMissionCreated-------'); }, // 任务销毁 onMissionDestroyed: (mission: number) = > { hilog.info(DOMAIN_NUMBER, TAG, '--------onMissionDestroyed-------'); }, // 任务快照变化 onMissionSnapshotChanged: (mission: number) = > { hilog.info(DOMAIN_NUMBER, TAG, '--------onMissionMovedToFront-------'); }, // 任务被移动到前台 onMissionMovedToFront: (mission: number) = > { hilog.info(DOMAIN_NUMBER, TAG, '--------onMissionClosed-------'); }, // 任务图标变化 onMissionIconUpdated: (mission: number, icon: image.PixelMap) = > { hilog.info(DOMAIN_NUMBER, TAG, '--------onMissionIconUpdated-------'); }, // 任务名称变化 onMissionLabelUpdated: (mission: number) = > { hilog.info(DOMAIN_NUMBER, TAG, '--------onMissionLabelUpdated-------'); }, // 任务实例被关闭 onMissionClosed: (mission: number) = > { hilog.info(DOMAIN_NUMBER, TAG, '--------onMissionClosed-------'); } };
// 1.注册任务变化通知 this.listenerId = missionManager.on('mission', this.listener); promptAction.showToast({ message: $r('app.string.register_success_toast') }); hilog.info(DOMAIN_NUMBER, TAG, `missionManager.on success, listenerId = ${this.listenerId}`);
// 2.获取系统最近20个任务 missionManager.getMissionInfos('', 20, (error: BusinessError, missions: Array< missionManager.MissionInfo >) = > { hilog.info(DOMAIN_NUMBER, TAG, 'getMissionInfos is called, error = ' + JSON.stringify(error)); hilog.info(DOMAIN_NUMBER, TAG, 'size = ' + missions.length); hilog.info(DOMAIN_NUMBER, 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') }); hilog.info(DOMAIN_NUMBER, 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) }); hilog.info(DOMAIN_NUMBER, TAG, `getMissionInfo successfully. Data: ${JSON.stringify(data)}`); }).catch((error: BusinessError) = > { hilog.info(DOMAIN_NUMBER, 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') }); } hilog.info(DOMAIN_NUMBER, TAG, 'getMissionSnapShot is called, error = ' + JSON.stringify(error)); hilog.info(DOMAIN_NUMBER, 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') }); } hilog.info(DOMAIN_NUMBER, TAG, 'getLowResolutionMissionSnapShot is called, error = ' + JSON.stringify(error)); hilog.info(DOMAIN_NUMBER, TAG, 'bundleName = ' + snapshot.ability.bundleName); })
// 6-1 加锁任务 missionManager.lockMission(this.missionId).then(() = > { promptAction.showToast({ message: $r('app.string.lock_success_toast') }); hilog.info(DOMAIN_NUMBER, TAG, 'lockMission is called '); });
// 6-2 解锁任务 missionManager.unlockMission(this.missionId).then(() = > { promptAction.showToast({ message: $r('app.string.unlock_success_toast') }); hilog.info(DOMAIN_NUMBER, TAG, 'unlockMission is called '); });
// 7.把任务切到前台 missionManager.moveMissionToFront(this.missionId).then(() = > { hilog.info(DOMAIN_NUMBER, TAG, 'moveMissionToFront is called '); });
// 8.删除单个任务 missionManager.clearMission(this.missionId).then(() = > { promptAction.showToast({ message: $r('app.string.delete_success_toast') }); hilog.info(DOMAIN_NUMBER, TAG, 'clearMission is called '); });
// 9.删除全部任务 missionManager.clearAllMissions().catch((err: BusinessError) = > { hilog.info(DOMAIN_NUMBER, TAG, `${err.code}`); });
// 10.解注册任务变化通知 missionManager.off('mission', this.listenerId, (error: BusinessError) = > { if (error === null) { promptAction.showToast({ message: $r('app.string.unregister_success_toast') }); } hilog.info(DOMAIN_NUMBER, TAG, 'unregisterMissionListener'); })
审核编辑 黄宇
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
鸿蒙
+关注
关注
57文章
2323浏览量
42752
发布评论请先 登录
相关推荐
华为鸿蒙—时代的开启者!
`在开始之前先给大家介绍下华为鸿蒙吧,鸿蒙微内核是基于微内核的全场景分布式OS,可按需扩展,实现更广泛的系统安全,主要用于物联网,特点是低时延,甚至可到毫秒级乃至亚毫秒级。
发表于 09-03 11:19
为满足全场景智慧体验 鸿蒙系统一四大技术特性!
鸿蒙OS的设计初衷是为满足全场景智慧体验的高标准的连接要求,为此华为提出了4大特性的系统解决方案。1. 分布式架构首次用于终端OS,实现跨终端无缝协同体验鸿蒙OS的“分布式OS架构”和“分布式软总线
发表于 09-03 21:09
华为鸿蒙一时代的开启者!
`在开始之前先给大家介绍下华为鸿蒙吧,鸿蒙微内核是基于微内核的全场景分布式OS,可按需扩展,实现更广泛的系统安全,主要用于物联网,特点是低时延,甚至可到毫秒级乃至亚毫秒级。
发表于 09-04 09:41
鸿蒙OS适用的全场景到底什么意思?
上,未来会有越来越多的智能设备使用开源的鸿蒙OS。华为消费者业务CEO余承东在介绍鸿蒙OS开发初衷时表示:“随着全场景智慧时代的到来,华为认
发表于 09-25 09:25
鸿蒙介绍
这份资料主要是对鸿蒙概念的扫盲,这里介绍了鸿蒙的应用场景和技术框架,同时也有1000+页,非常详细的入门手册。这份资料具体的内容有:HarmonyOS快速入门手册2.0通用设计基础Ha
发表于 11-24 10:49
[文章] HarmonyOS学习之一:鸿蒙HarmonyOS系统介绍
华为的鸿蒙系统优点是流畅度和大一统。这套系统主要是基于微内核的全场景分布式OS,可以按照需要进行扩展,由此来实现更为广泛的系统的安全,它主要用于物联网,它的主要特点是很低的时延。HarmonyOS
发表于 11-26 15:26
[文章] HarmonyOS学习之一:鸿蒙HarmonyOS系统介绍
华为的鸿蒙系统优点是流畅度和大一统。这套系统主要是基于微内核的全场景分布式OS,可以按照需要进行扩展,由此来实现更为广泛的系统的安全,它主要用于物联网,它的主要特点是很低的时延。HarmonyOS
发表于 12-02 16:57
【有奖讨论】鸿蒙操作系统及华为全场景新品发布会
新品发布会这场直播会为大家揭示什么呢?首批搭载鸿蒙手机上线?鸿蒙全场景新品类发布!平板?智慧屏?全屋智能?智能座舱、车机?各位开发者没有不爱电子产品的吧?大家希望这次的华为全
发表于 05-28 19:07
鸿蒙应用开发入门资料合集
的开发难度!赞!2、鸿蒙应用开发入门资料二:开发环境搭建下载HarmonyOS SDK DevEco Studio提供SDK Manager统一管理
发表于 03-22 11:23
鸿蒙开源全场景应用开发资料汇总
1、鸿蒙开源全场景应用开发——视频编解码面对鸿蒙这一全新的生态,广大消费者在积极尝鲜的同时,家中不可避免会出现安卓设备和鸿蒙设备并存的现象,
发表于 03-23 10:09
【学习打卡】----鸿蒙系统开发过程中的心得体会
的设计模式,带来的就是一种颠覆式的用户体验。而其底层基础就在于特有的分布式任务调度、分布式数据管理等能力,有兴趣的朋友可以关注一下。3、鸿蒙方便产品生态的建设一次开发多端部署,体现了
发表于 07-03 18:07
润和软件鸿蒙全场景开发与教学创新解决方案赋能高校ICT人才培养
、智慧出行、运动健康五大场景下的创新体验,基于新的HarmonyOS开发技术给开发者构筑更加高效便捷的开发平台,并呈现了丰富的开发者活动。携
发表于 11-09 10:22
鸿蒙 OS 应用开发初体验
什么是 HarmonyOS?
HarmonyOS(鸿蒙操作系统)是华为公司开发的一款基于微内核的分布式操作系统。它是一个面向物联网(IoT)时代的全场景操作系统,旨在为各种类型的设备提供统一
发表于 11-02 19:38
鸿蒙OS 分布式任务调度
鸿蒙OS 分布式任务调度概述 在 HarmonyO S中,分布式任务调度平台对搭载 HarmonyOS 的多设备构筑的“超级虚拟终端”提供统一的组件管理能力,为应用定义统一的能力基线、
鸿蒙开发:任务(Mission)与启动模式
如前文所述,一个UIAbility实例对应一个任务。UIAbility实例个数与UIAbility配置的启动模式有关。在FA模型下,通过config.json配置文件中的“launchType”属性
评论