1# 任务管理场景介绍 2 3 4任务管理相关的基本概念如下: 5 6 7- AbilityRecord:系统服务侧管理一个UIAbility实例的最小单元,对应一个应用侧的UIAbility组件实例。 8 9- MissionRecord:任务管理的最小单元。一个MissionRecord中仅有一个AbilityRecord,即一个UIAbility组件实例对应一个单独的任务。 10 11- MissionList:一个从桌面开始启动的任务列表,记录了任务之间的启动关系,上一个任务由下一个任务启动,最底部的任务由桌面启动,这里称之为任务链。 12 13- MissionListManager:系统任务管理模块,内部维护了当前所有的任务链,与最近任务列表保持一致。 14 **图1** 任务管理示意图 15  16 17 18任务的管理由系统应用(如桌面应用)负责,三方应用无法管理任务。用户通过最近任务列表进行任务的相关交互。当创建任务后,用户可以对最近任务列表进行如下操作: 19 20 21- 删除一个指定的任务。 22 23- 加锁或解锁一个指定的任务(加锁后的任务在清理所有任务时不会被清理)。 24 25- 清理最近任务列表中的所有任务。 26 27- 将一个指定的任务切换到前台。 28 29 30一个UIAbility实例对应一个单独的任务,因此应用调用startAbility()方法启动一个UIAbility时,就是创建了一个任务。 31 32 33桌面应用调用[missionManager](../reference/apis/js-apis-application-missionManager.md)的接口管理任务,需要申请`ohos.permission.MANAGE_MISSIONS`权限,配置方式请参阅[访问控制授权申请指导](../security/accesstoken-guidelines.md#stage模型)。 34 35 36利用missionManager进行任务管理(监听任务变化、获取任务信息、获取任务快照、清理任务、任务加锁/解锁等),示例代码如下: 37 38 39 40```ts 41import missionManager from '@ohos.app.ability.missionManager' 42 43let listener = { 44 // 任务创建 45 onMissionCreated: function (mission) { 46 console.info("--------onMissionCreated-------") 47 }, 48 // 任务销毁 49 onMissionDestroyed: function (mission) { 50 console.info("--------onMissionDestroyed-------") 51 }, 52 // 任务快照变化 53 onMissionSnapshotChanged: function (mission) { 54 console.info("--------onMissionSnapshotChanged-------") 55 }, 56 // 任务被移动到前台 57 onMissionMovedToFront: function (mission) { 58 console.info("--------onMissionMovedToFront-------") 59 }, 60 // 任务图标变化 61 onMissionIconUpdated: function (mission, icon) { 62 console.info("--------onMissionIconUpdated-------") 63 }, 64 // 任务名称变化 65 onMissionLabelUpdated: function (mission) { 66 console.info("--------onMissionLabelUpdated-------") 67 }, 68 // 任务实例被关闭 69 onMissionClosed: function (mission) { 70 console.info("--------onMissionClosed-------") 71 } 72}; 73 74// 1.注册任务变化通知 75let listenerId = missionManager.on('mission', listener); 76 77// 2.获取系统最近20个任务 78missionManager.getMissionInfos("", 20, (error, missions) => { 79 console.info("getMissionInfos is called, error.code = " + error.code); 80 console.info("size = " + missions.length); 81 console.info("missions = " + JSON.stringify(missions)); 82}); 83 84// 3.获取单个任务的详细信息() 85let missionId = 11; // 11只是示例,实际是从系统中获取的任务id,下面类似 86let mission = missionManager.getMissionInfo("", missionId).catch(function (err) { 87 console.info(err); 88}); 89 90// 4.获取任务快照 91missionManager.getMissionSnapShot("", missionId, (error, snapshot) => { 92 console.info("getMissionSnapShot is called, error.code = " + error.code); 93 console.info("bundleName = " + snapshot.ability.bundleName); 94}) 95 96// 5.获取低分辨任务快照 97missionManager.getLowResolutionMissionSnapShot("", missionId, (error, snapshot) => { 98 console.info("getLowResolutionMissionSnapShot is called, error.code = " + error.code); 99 console.info("bundleName = " + snapshot.ability.bundleName); 100}) 101 102// 6.加锁/解锁任务 103missionManager.lockMission(missionId).then(() => { 104 console.info("lockMission is called "); 105}); 106 107missionManager.unlockMission(missionId).then(() => { 108 console.info("unlockMission is called "); 109}); 110 111// 7.把任务切到前台 112missionManager.moveMissionToFront(missionId).then(() => { 113 console.info("moveMissionToFront is called "); 114}); 115 116// 8.删除单个任务 117missionManager.clearMission(missionId).then(() => { 118 console.info("clearMission is called "); 119}); 120 121// 9.删除全部任务 122missionManager.clearAllMissions().catch(function (err) { 123 console.info(err); 124}); 125 126// 10.解注册任务变化通知 127missionManager.off('mission', listenerId, (error) => { 128 console.info("unregisterMissionListener"); 129}) 130``` 131