应用退居后台,如何在低功耗的情况下保证任务正常运行?本文华为软件功耗专家黄文将分享议题——应用后台功耗经验。

本文将从安卓绿色联盟功耗标准 2.0、谷歌后台功耗方案、华为后台功耗方案以及开发者资源使用建议和检测工具五大方面进行全面讲解。

安卓绿色联盟功耗标准 2.0

《安卓绿色联盟应用体验标准 2.0---功耗标准》详细介绍了应用后台软资源和硬资源的使用标准,查看详情请访问安卓绿色联盟官网。

谷歌后台功耗方案

谷歌从 Android M 开始着力改善终端的续航表现。Android 版本在演进中主要提供如下几个方案。

1.后台位置限制:

对后台应用获取用户当前位置的频率进行限制。

相关链接:https://developer.android.google.cn/about/versions/oreo/background-location-limits

2.后台服务限制:

限制应用在后台运行服务,并禁止应用通过隐藏/不可见方式调用 CPU 或网络资源。

相关链接:https://developer.android.google.cn/about/versions/oreo/background#services

3.后台限制:

当系统检测到应用出现不良行为时,系统会向用户询问是否要限制该应用在后台访问设备资源。

相关链接:https://developer.android.google.cn/topic/performance/background-optimization#bg-restrict

4.谷歌后台功耗方案-Doze(低耗电模式和应用待机模式)

谷歌在 Android M 版本引入了 Doze 方案,此方案主要针对后台应用在没有活动的情况下做某些限制。设备未充电且屏幕关闭处于空闲状态一段时间后,系统会进入低耗电或者应用待机模式,对应用行为施加相应限制。

相关链接:https://developer.android.google.cn/about/versions/marshmallow/android-6.0-changes#behavior-power

image

如图所示,以下是 Doze 模式各状态说明:

ACTIVE: 设备活动态

INACTIVE:设备不活跃 (灭屏、不运动) 等待进入 idle.

IDLE_PENDING: 设备准备进入下一阶段

SENSING: 传感器检测设备是否运动

LOCATING: 设备位置变化.

IDLE: 设备进入 idle,并尽量长时间保持该状态

IDLE_MAINTENANCE: 退出 idle 进入 “维护期”

谷歌还引入了 Light-Doze(Android N) 和 Deep-Doze(Android M) 的概念,具体内容如下:

image

5.应用待机群组

应用待机群组对应用进行分组管理,不同的分组享有不同的权限设置,杜绝了对应用一刀切的现象。

相关链接:https://developer.android.google.cn/preview/features/power#buckets

应用待机分组:

1)活跃 (Active): 应用正在被使用

2)工作 (Working set): 应用使用频率很高

3)常用 (Frequent): 应用经常但不是每天被使用

4)极少 (Rare): 应用偶尔被使用

5)从不(Never):安装后一次都未被使用过的应用

分组策略:

image

调试:

通过 adb 命令将应用手动划分至某一待机群组。输入以下命令,更改群组:

$ adb shell am set-standby-bucket packagename active/working_set/frequent/rare

输入以下命令,查看应用所处群组:

$ adb shell am get-standby-bucket [packagename]

为促进用户体验,谷歌对应用在后台状态下的建议如下:

image

华为后台功耗方案

1.华为的功耗方案,主要是在谷歌的基础上对应用的异常行为进行监控,通过智电机器人,识别后台应用的行为是正常耗电还是异常耗电。

2.华为的优化分为主动优化和异常防护。

主动优化在谷歌运行方案的基础上增加了冷冻方案,应用退到后台后,在没有用户可感知状态和活动下,将应用所占用的资源包括 CPU、软硬件资源等全部暂停。一旦应用需要运行,资源会启动恢复流程,这就是主动优化。

华为的盾防系统会监控所有后台资源消耗情况,在用户未感知的情况下,一旦资源消耗超过华为功耗红线标准,便会发出高耗电提醒,这就是华为的异常防护。

具体红线标准请参考《安卓绿色联盟应用体验标准 2.0---功耗标准》,标准包括持锁阻止系统休眠、alarm 频繁唤醒系统、后台 CPU 高负载耗电、长时间网络定位等。

3.华为低功耗 Power kit 包括 PUSH+NC 和 Bastet 链路托管技术。

应用推送远程通知,可以使用华为 PUSH NC。

相关链接:

https://developer.huawei.com/consumer/cn/service/hms/pushservice.html

应用保持长链接,可以接入华为链路托管技术 Bastet.

相关链接:

https://developer.huawei.com/consumer/cn/devservice/doc/30401

开发者资源使用建议

1.定时任务

推荐绿色机制:

2.网络

推荐绿色机制:

image

image

3.Wakelock

推荐绿色机制:

资源使用检测工具

1.Battery Historian

相关链接:https://developer.android.google.cn/topic/performance/power/battery-historian

  1. AT&T Application Resource Optimizer

擅长于网络跟踪

相关链接:

https://developer.att.com/application-resource-optimizer

  1. Android vitals

对过度唤醒、wifi 扫描、网络使用、长时间持唤醒锁、进行监控,并输出报告

相关链接:https://developer.android.google.cn/topic/performance/vitals/

总结

为保证应用在低功耗的情况下能够正常的运行任务,建议使用如下方案:

1.研发阶段:

1) 推送远程通知消息,需使用 FCM 或华为 PUSH NC。

2) 保持长链接心跳,需使用华为 Modem 链路托管技术(华为 Bastet)

3) 用户触发的后台业务,需使用前台服务 + 常驻通知。

4) 非用户触发可推迟的任务,需使用 JobScheduler/WorkManager。

5) 合理使用 Alarm,Wakelock,Network,GPS 等软硬资源。

2.测试验收:

借助工具,使用 battery-historian、 ARO、Android vitals 分析运行时和长待机情况。

3.禁止行为:

恶意保活,包括无声播放、一像素界面、低流量下载等。

关注安卓绿色联盟公众号,回复 “2304” 获取 PPT


↙↙↙阅读原文可查看相关链接,并与作者交流