• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.resourceschedule.backgroundProcessManager (后台子进程管控)
2
3<!--Kit: Background Tasks Kit-->
4<!--Subsystem: Resourceschedule-->
5<!--Owner: @hongjianfeng-->
6<!--Designer: @zhouben25-->
7<!--Tester: @fenglili18-->
8<!--Adviser: @Brilliantry_Rui-->
9
10本模块提供了后台子进程管控接口。开发者可以通过本模块接口对子进程进行压制、解压制,避免子进程过多占用系统资源,导致系统使用卡顿。本模块接口仅对通过[OH_Ability_StartNativeChildProcess](../apis-ability-kit/capi-native-child-process-h.md#oh_ability_startnativechildprocess)接口创建的子进程生效。
11
12>  **说明:**
13>
14> 本模块首批接口从API version 17开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
15
16## 导入模块
17
18```ts
19import { backgroundProcessManager } from '@kit.BackgroundTasksKit';
20```
21
22## backgroundProcessManager.setProcessPriority
23
24setProcessPriority(pid: number, priority: ProcessPriority): Promise&lt;void&gt;
25
26设置子进程的压制档位,子进程被压制后可获得的CPU资源将会受到限制。如果主进程调度策略发生变化,如从后台切至前台等,子进程会跟随主进程一同变化,子进程如需继续压制,需要重新调用本接口。
27
28**系统能力**: SystemCapability.Resourceschedule.BackgroundProcessManager
29
30**参数**:
31
32| 参数名      | 类型                                  | 必填   | 说明                                                                                                                            |
33|----------|-------------------------------------| ---- |-------------------------------------------------------------------------------------------------------------------------------|
34| pid      | number                              | 是    | 需要被压制子进程的进程号,[OH_Ability_StartNativeChildProcess](../apis-ability-kit/capi-native-child-process-h.md#oh_ability_startnativechildprocess)接口创建子进程后的pid参数,即为子进程进程号。 |
35| priority | [ProcessPriority](#processpriority) | 是    | 压制档位。                                                                                                                         |
36
37**返回值**:
38
39| 类型             | 说明               |
40| -------------- | ---------------- |
41| Promise\<void> | Promise对象。无返回结果的Promise对象。 |
42
43**错误码**:
44
45以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
46
47| 错误码ID    | 错误信息             |
48|----------|------------------|
49| 401      | Parameter error. Possible causes: priority is out of range. |
50
51**示例**:
52
53```ts
54import { BusinessError } from '@kit.BasicServicesKit';
55import { backgroundProcessManager } from '@kit.BackgroundTasksKit';
56
57let childProcessPid = 33333;
58try {
59    backgroundProcessManager.setProcessPriority(childProcessPid,
60        backgroundProcessManager.ProcessPriority.PROCESS_INACTIVE);
61} catch (error) {
62    console.error(`setProcessPriority failed, errCode: ${(error as BusinessError).code}, message: ${(error as BusinessError).message}`);
63}
64```
65
66## backgroundProcessManager.resetProcessPriority
67
68resetProcessPriority(pid: number): Promise&lt;void&gt;
69
70为子进程解压制,即子进程策略恢复为主进程调度策略。若主进程调度策略发生变化,如从后台切至前台等, 子进程会跟随主进程一同变化,等效于执行一次resetProcessPriority动作。
71
72**系统能力**: SystemCapability.Resourceschedule.BackgroundProcessManager
73
74**参数**:
75
76| 参数名      | 类型                 | 必填   | 说明                                                                                                                        |
77|----------|--------------------| ---- |---------------------------------------------------------------------------------------------------------------------------|
78| pid      | number             | 是    | 子进程的进程号,[OH_Ability_StartNativeChildProcess](../apis-ability-kit/capi-native-child-process-h.md#oh_ability_startnativechildprocess)接口创建子进程后的pid参数,即为子进程进程号。 |
79
80**返回值**:
81
82| 类型             | 说明               |
83| -------------- | ---------------- |
84| Promise\<void> | Promise对象。无返回结果的Promise对象。 |
85
86**示例**:
87
88```ts
89import { BusinessError } from '@kit.BasicServicesKit';
90import { backgroundProcessManager } from '@kit.BackgroundTasksKit';
91
92let childProcessPid = 33333;
93try {
94    backgroundProcessManager.resetProcessPriority(childProcessPid);
95} catch (error) {
96    console.error(`setProcessPriority failed, errCode: ${(error as BusinessError).code}, message: ${(error as BusinessError).message}`);
97}
98```
99
100## backgroundProcessManager.setPowerSaveMode<sup>20+</sup>
101
102setPowerSaveMode(pid: number, powerSaveMode: PowerSaveMode): Promise&lt;void&gt;
103
104设置进程的能效模式,使用Promise异步回调。
105
106当应用满足以下条件时,可以设置自身是否进入能效模式:
107- 应用未获取系统焦点,未执行音频或界面刷新操作。
108- 无法通过框架层获取电源锁。
109- 应用需要执行压缩、解压缩、编译等耗时较长的计算任务,不希望这些任务受到显著的CPU资源限制(即被迫进入能效模式)。
110
111**设备行为差异**:该接口在PC/2in1中可正常调用,在其他设备类型中返回801错误码。
112
113**需要权限**: ohos.permission.BACKGROUND_MANAGER_POWER_SAVE_MODE
114
115**系统能力**: SystemCapability.Resourceschedule.BackgroundProcessManager
116
117**参数**:
118
119| 参数名      | 类型      | 必填      | 说明      |
120|-------------|-----------|-----------|-----------|
121| pid         | number    | 是        | 进程号。  |
122| powerSaveMode | [PowerSaveMode](#powersavemode20) | 是 | 能效模式。 |
123
124**返回值**:
125
126| 类型             | 说明               |
127| -------------- | ---------------- |
128| Promise\<void> | Promise对象。无返回结果的Promise对象。 |
129
130**错误码**:
131
132以下错误码的详细介绍请参见[backgroundProcessManager错误码](errorcode-backgroundProcessManager.md)和[通用错误码](../errorcode-universal.md)。
133
134| 错误码ID    | 错误信息             |
135|----------|------------------|
136| 201      | Permission denied. |
137| 801      | Capability not supported. |
138| 31800002      | Parameter error. Possible causes: <br> 1. Mandatory parameters are left unspecified; <br> 2. Incorrect parameter types; 3. PowerSaveMode status is out of range. |
139| 31800003      | Setup error, This setting is overridden by setting in Task Manager. |
140| 31800004      | The setting failed due to system scheduling reasons. |
141
142**示例**:
143
144```ts
145import { BusinessError } from '@kit.BasicServicesKit';
146import { backgroundProcessManager } from '@kit.BackgroundTasksKit';
147
148let pid = 33333;
149try {
150    backgroundProcessManager.setPowerSaveMode(pid, backgroundProcessManager.PowerSaveMode.EFFICIENCY_MODE);
151} catch (error) {
152    console.error(`setPowerSaveMode failed, errCode: ${(error as BusinessError).code}, message: ${(error as BusinessError).message}`);
153}
154```
155
156## backgroundProcessManager.isPowerSaveMode<sup>20+</sup>
157
158isPowerSaveMode(pid: number): Promise&lt;boolean&gt;
159
160查询进程是否处于能效模式,使用Promise异步回调。
161
162**设备行为差异**:该接口在PC/2in1中可正常调用,在其他设备类型中返回801错误码。
163
164**需要权限**: ohos.permission.BACKGROUND_MANAGER_POWER_SAVE_MODE
165
166**系统能力**: SystemCapability.Resourceschedule.BackgroundProcessManager
167
168**参数**:
169
170| 参数名      | 类型      | 必填      | 说明      |
171|-------------|-----------|-----------|-----------|
172| pid         | number    | 是        | 进程号。  |
173
174**返回值**:
175
176| 类型             | 说明               |
177| -------------- | ---------------- |
178| Promise\<boolean> | Promise对象。返回进程PID是否处于能效模式,返回true表示进程处于能效模式,返回false表示进程未处于能效模式。 |
179
180**错误码**:
181
182以下错误码的详细介绍请参见[backgroundProcessManager错误码](errorcode-backgroundProcessManager.md)和[通用错误码](../errorcode-universal.md)。
183
184| 错误码ID    | 错误信息             |
185|----------|------------------|
186| 201      | Permission denied. |
187| 801      | Capability not supported. |
188| 31800002      | Parameter error. Possible causes: <br> 1. Mandatory parameters are left unspecified; <br> 2. Incorrect parameter types. |
189
190**示例**:
191
192```ts
193import { BusinessError } from '@kit.BasicServicesKit';
194import { backgroundProcessManager } from '@kit.BackgroundTasksKit';
195
196let pid = 33333;
197try {
198    backgroundProcessManager.isPowerSaveMode(pid).then((result: boolean) => {
199        console.info("isPowerSaveMode: " + result.toString());
200    });
201} catch (error) {
202    console.error(`isPowerSaveMode failed, errCode: ${(error as BusinessError).code}, message: ${(error as BusinessError).message}`);
203}
204```
205
206## ProcessPriority
207
208子进程压制档位。
209
210**系统能力**: SystemCapability.Resourceschedule.BackgroundProcessManager
211
212| 名称                   |  值      | 说明                                                                             |
213|----------------------| -------- |--------------------------------------------------------------------------------|
214| PROCESS_BACKGROUND   | 1        | 该档位相较PROCESS_INACTIVE压制效果更显著,获取到的CPU资源更少。推荐执行处于后台的图文页面等用户无感知业务的后台子进程时设置该档位。  |
215| PROCESS_INACTIVE     | 2        | 推荐正在执行播放音频、导航等用户可感知业务的后台子进程时设置该档位。                                             |
216
217## PowerSaveMode<sup>20+</sup>
218
219能效模式。
220
221**系统能力**: SystemCapability.Resourceschedule.BackgroundProcessManager
222
223| 名称 | 值 | 说明 |
224|-----|----|-------|
225| EFFICIENCY_MODE | 1 | 效率模式,不会跟随系统进入能效模式,进入能效模式后获取到的CPU资源更少。 |
226| DEFAULT_MODE | 2 | 跟随系统,可能会进入能效模式。 |
227
228