OpenHarmony-设备待机部件
简介
为提高设备续航,降低设备功耗,在设备进入待机空闲状态时,系统会限制后台应用使用资源。开发者可以根据自身情况,为自己的应用申请纳入待机资源管控,或者暂时不被待机资源管控。
图 1 设备待机部件整体架构图
**
**
目录
/foundation/resourceschedule/device_standby
├── frameworks # 接口实现
├── interfaces
│ ├── innerkits # 对内接口目录
│ └── kits # 对外接口目录
├── sa_profile # 组件服务配置
├── services # 组件服务实现
└── utils # 组件工具实现
└── plugins # 插件(状态监控、决策、转换、执行)
└── bundle.json # 部件描述及编译文件
部件内子模块职责说明
子模块名称 | 功能职责描述 |
---|---|
interface | 1.对外提供inner级别dump维测、豁免、通知接口。 |
2.提供约束接口。 | |
sa_profile | 在服务管理中配置standby服务。 |
services | 1.内部核心服务功能实现。 |
2.通知、查询功能。 | |
plugins | 1.状态监控。 |
2.决策是否限制设备应用资源。 | |
3.转换设备状态。 | |
4.执行策略。 | |
utils | 1.通用工具、日志实现。 |
2.相关配置读写。 | |
frameworks | 配置对外接口框架能力。 |
设备待机管控
接口名 | 接口描述 |
---|---|
function getExemptedApps(resourceTypes: number, callback: AsyncCallback<Array<ExemptedAppInfo>>): void; | 获取进入待机模式的应用名单,使用Callback异步回调。 |
function getExemptedApps(resourceTypes: number): Promise<Array<ExemptedAppInfo>>; | 获取进入待机模式的应用名单,使用Promise异步回调。 |
function requestExemptionResource(request: ResourceRequest): void; | 应用订阅申请豁免,使应用临时不进入待机管控。 |
function releaseExemptionResource(request: ResourceRequest): void; | 取消应用订阅申请豁免。 |
使用说明
当设备应用长时间未被使用或通过按键,本部件可以使设备应用进入待机模式。待机模式不影响应用使用,还可以延长电池续航时间。通过本模块接口,开发者可为应用申请或取消待机资源管控。使用时需先申请权限:ohos.permission.DEVICE_STANDBY_EXEMPTION。
ResourceType
非待机应用资源枚举。
名称 | 值 | 说明 |
---|---|---|
NETWORK | 1 | 网络访问资源 |
RUNNING_LOCK | 2 | cpu-runninglock资源 |
TIMER | 4 | timer任务资源 |
WORK_SCHEDULER | 8 | work任务资源 |
AUTO_SYNC | 16 | 自动同步的资源 |
PUSH | 32 | pushkit资源 |
FREEZE | 64 | 冻结应用资源 |
ExemptedAppInfo
豁免应用信息,未进入待机管控的应用信息。
名称 | 类型 | 必填 | 说明 |
---|---|---|---|
resourceTypes | number | 是 | 应用的资源类型 |
name | string | 是 | 应用名 |
duration | number | 是 | 豁免时长 |
ResourceRequest
待机资源请求体。
名称 | 类型 | 必填 | 说明 |
---|---|---|---|
resourceTypes | number | 是 | 应用的资源类型 |
uid | number | 是 | 应用uid |
name | string | 是 | 应用名称 |
duration | number | 是 | 豁免时长 |
reason | string | 是 | 申请原因 |
相关仓
资源调度子系统
resourceschedule_device_standby
resourceschedule_work_scheduler
resourceschedule_background_task_mgr
竞品相关资料
android-针对低电耗模式和应用待机模式进行优化
- android-针对低电耗模式和应用待机模式进行优化
如果用户未接通电源,让设备长时间处于静止状态,且屏幕关闭,则设备会进入低电耗模式。在低电耗模式下,系统会尝试通过限制应用对网络和 CPU 密集型服务的访问权限来节省电量。此外,这还会阻止应用访问网络,并推迟其作业、同步和标准闹钟。
系统会定期退出低电耗模式一会儿,以便应用完成其已推迟的活动。在此维护期,系统会运行所有待处理的同步、作业和闹钟,并允许应用访问网络。
图 1. 低电耗模式提供了周期性维护期,让应用使用网络并处理待处理的活动。
维护窗口结束后,系统会再次进入低电耗模式,暂停网络访问并延迟作业、同步和闹钟。随着时间的推移,系统安排维护窗口的频率会降低,这有助于在设备未充电时长时间处于不活动状态时降低耗电量。
当用户通过移动设备、打开屏幕或连接充电器唤醒设备时,系统会退出低电耗模式,并且所有应用都会恢复正常的活动。
在低电耗模式下,系统会对您的应用应用以下限制:
- 暂停网络访问权限。
- 忽略唤醒锁定。
- 将标准 AlarmManager 闹钟(包括 setExact() 和 setWindow())推迟到下一个维护窗口。
- 如果您需要设置在低电耗模式下触发的闹钟,请使用 setAndAllowWhileIdle() 或 setExactAndAllowWhileIdle()。
- 使用 setAlarmClock() 设置的闹钟会继续正常触发。系统会在这些闹钟触发前不久退出低电耗模式。
- 不执行 WLAN 扫描。
- 不允许运行同步适配器。
- 不允许 JobScheduler 运行。
IOS的墓碑机制
具体描述可以参考墓碑机制与 iOS 应用程序的生命周期 - 陈旭华 - 博客园
墓碑机制(Tombstone)也就是常说的「伪多任务」,是手机操作系统中的一个程序运行规则。
当上一个任务被迫中断时,如按下 Home 键至主界面的瞬间,系统会记录当下应用程序的状态,随后程序被冻结起来(完全挂起),就像把事件记录在墓碑上一样。
当需要恢复时,根据墓碑上的内容,将程序恢复到中断之前的状态。
这样的一种机制就是墓碑机制,墓碑机制常见于移动设备这种内存或电能资源有限的平台。
在此机制之上,苹果也开放了一个后台接口,允许应用在进入后台之后继续运行10分钟,无论亮屏还是息屏休眠都是10分钟,时间一到立马挂起。
墓碑式后台,在关闭程序时保存现场,下次启动时还原,给人一种后台的假象。