• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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  ![mission-list-manager](figures/mission-list-manager.png)
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