本模块提供了后台子进程管控接口。开发者可以通过本模块接口对子进程进行压制、解压制,避免子进程过多占用系统资源,导致系统使用卡顿。本模块接口仅对通过OH_Ability_StartNativeChildProcess接口创建的子进程生效。
本模块首批接口从API version 17开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
setProcessPriority(pid: number, priority: ProcessPriority): Promise<void>
设置子进程的压制档位,子进程被压制后可获得的CPU资源将会受到限制。如果主进程调度策略发生变化,如从后台切至前台等,子进程会跟随主进程一同变化,子进程如需继续压制,需要重新调用本接口。使用Promise异步回调。
系统能力: SystemCapability.Resourceschedule.BackgroundProcessManager
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| pid | number | 是 | 需要被压制子进程的进程号,OH_Ability_StartNativeChildProcess接口创建子进程后的pid参数,即为子进程进程号。 |
| priority | ProcessPriority | 是 | 压制档位。 |
返回值:
| 类型 | 说明 |
|---|---|
| Promise<void> | Promise对象。无返回结果的Promise对象。 |
错误码:
以下错误码的详细介绍请参见通用错误码。
| 错误码ID | 错误信息 |
|---|---|
| 401 | Parameter error. Possible causes: priority is out of range. |
示例:
import { BusinessError } from '@kit.BasicServicesKit';
import { backgroundProcessManager } from '@kit.BackgroundTasksKit';
let childProcessPid = 33333;
try {
backgroundProcessManager.setProcessPriority(childProcessPid,
backgroundProcessManager.ProcessPriority.PROCESS_INACTIVE);
} catch (error) {
console.error(`setProcessPriority failed, errCode: ${(error as BusinessError).code}, message: ${(error as BusinessError).message}`);
} resetProcessPriority(pid: number): Promise<void>
为子进程解压制,即子进程策略恢复为主进程调度策略。若主进程调度策略发生变化,如从后台切至前台等, 子进程会跟随主进程一同变化,等效于执行一次resetProcessPriority动作。使用Promise异步回调。
系统能力: SystemCapability.Resourceschedule.BackgroundProcessManager
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| pid | number | 是 | 子进程的进程号,OH_Ability_StartNativeChildProcess接口创建子进程后的pid参数,即为子进程进程号。 |
返回值:
| 类型 | 说明 |
|---|---|
| Promise<void> | Promise对象。无返回结果的Promise对象。 |
示例:
import { BusinessError } from '@kit.BasicServicesKit';
import { backgroundProcessManager } from '@kit.BackgroundTasksKit';
let childProcessPid = 33333;
try {
backgroundProcessManager.resetProcessPriority(childProcessPid);
} catch (error) {
console.error(`resetProcessPriority failed, errCode: ${(error as BusinessError).code}, message: ${(error as BusinessError).message}`);
} setPowerSaveMode(pid: number, powerSaveMode: PowerSaveMode): Promise<void>
设置进程的能效模式,使用Promise异步回调。
当应用满足以下条件时,可以设置自身是否进入能效模式:
设备行为差异:该接口在PC/2in1中可正常调用,在其他设备类型中返回801错误码。
需要权限: ohos.permission.BACKGROUND_MANAGER_POWER_SAVE_MODE
系统能力: SystemCapability.Resourceschedule.BackgroundProcessManager
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| pid | number | 是 | 进程号。 取值为正整数。 |
| powerSaveMode | PowerSaveMode | 是 | 能效模式。 |
返回值:
| 类型 | 说明 |
|---|---|
| Promise<void> | Promise对象。无返回结果的Promise对象。 |
错误码:
以下错误码的详细介绍请参见backgroundProcessManager错误码和通用错误码。
| 错误码ID | 错误信息 |
|---|---|
| 201 | Permission denied. |
| 801 | Capability not supported. |
| 31800002 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. PowerSaveMode status is out of range. |
| 31800003 | Setup error, This setting is overridden by settings in Task Manager |
| 31800004 | The setting failed due to system scheduling reasons. |
示例:
import { BusinessError } from '@kit.BasicServicesKit';
import { backgroundProcessManager } from '@kit.BackgroundTasksKit';
let pid = 33333; // 请开发者替换为实际的进程号
try {
backgroundProcessManager.setPowerSaveMode(pid, backgroundProcessManager.PowerSaveMode.EFFICIENCY_MODE).then(() => {
console.info('setPowerSaveMode promise');
}).catch((err: BusinessError) => {
console.error(`setPowerSaveMode failed, promise errCode: ${err.code}, message: ${err.message}`);
});
} catch (error) {
console.error(`setPowerSaveMode failed, errCode: ${(error as BusinessError).code}, message: ${(error as BusinessError).message}`);
} isPowerSaveMode(pid: number): Promise<boolean>
查询进程是否处于能效模式,使用Promise异步回调。
设备行为差异:该接口在PC/2in1中可正常调用,在其他设备类型中返回801错误码。
需要权限: ohos.permission.BACKGROUND_MANAGER_POWER_SAVE_MODE
系统能力: SystemCapability.Resourceschedule.BackgroundProcessManager
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| pid | number | 是 | 进程号。 取值为正整数。 |
返回值:
| 类型 | 说明 |
|---|---|
| Promise<boolean> | Promise对象。返回进程PID是否处于能效模式,返回true表示进程处于能效模式,返回false表示进程未处于能效模式。 |
错误码:
以下错误码的详细介绍请参见backgroundProcessManager错误码和通用错误码。
| 错误码ID | 错误信息 |
|---|---|
| 201 | Permission denied. |
| 801 | Capability not supported. |
| 31800002 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types. |
示例:
import { BusinessError } from '@kit.BasicServicesKit';
import { backgroundProcessManager } from '@kit.BackgroundTasksKit';
let pid = 33333; // 请开发者替换为实际的进程号
try {
backgroundProcessManager.isPowerSaveMode(pid).then((result: boolean) => {
console.info(`isPowerSaveMode: ${result}`);
}).catch((err: BusinessError) => {
console.error(`isPowerSaveMode failed, promise errCode: ${err.code}, message: ${err.message}`);
});
} catch (error) {
console.error(`isPowerSaveMode failed, errCode: ${(error as BusinessError).code}, message: ${(error as BusinessError).message}`);
} getPowerSaveMode(pid: number): Promise<PowerSaveMode>
获取进程能效模式。使用Promise异步回调。
设备行为差异: 该接口在PC/2in1中可正常调用,在其他设备类型中返回801错误码。
需要权限: ohos.permission.BACKGROUND_MANAGER_POWER_SAVE_MODE
系统能力: SystemCapability.Resourceschedule.BackgroundProcessManager
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| pid | number | 是 | 进程号。 取值为正整数。 |
返回值:
| 类型 | 说明 |
|---|---|
| Promise<PowerSaveMode> | Promise对象。返回进程能效模式状态。 |
错误码:
以下错误码的详细介绍请参见backgroundProcessManager错误码和通用错误码。
| 错误码ID | 错误信息 |
|---|---|
| 201 | Permission denied. |
| 801 | Capability not supported. |
| 31800002 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types. |
示例:
import { BusinessError } from '@kit.BasicServicesKit';
import { backgroundProcessManager } from '@kit.BackgroundTasksKit';
let pid = 33333; // 请开发者替换为实际的进程号
try {
backgroundProcessManager.getPowerSaveMode(pid).then((result: backgroundProcessManager.PowerSaveMode) => {
console.info(`getPowerSaveMode: ${result}`);
}).catch((err: BusinessError) => {
console.error(`getPowerSaveMode failed, promise errCode: ${err.code}, message: ${err.message}`);
});
} catch (error) {
console.error(`getPowerSaveMode failed, errCode: ${(error as BusinessError).code}, message: ${(error as BusinessError).message}`);
}