应用退居后台,如何在低功耗的状况下保证任务正常运行?本文华为软件功耗专家黄文将分享议题——应用后台功耗经验。html
本文将从安卓绿色联盟功耗标准2.0、谷歌后台功耗方案、华为后台功耗方案以及开发者资源使用建议和检测工具五大方面进行全面讲解。android
《安卓绿色联盟应用体验标准2.0---功耗标准》详细介绍了应用后台软资源和硬资源的使用标准,查看详情请访问安卓绿色联盟官网。shell
谷歌从Android M开始着力改善终端的续航表现。Android版本在演进中主要提供以下几个方案。网络
1.后台位置限制:app
对后台应用获取用户当前位置的频率进行限制。工具
相关连接:https://developer.android.google.cn/about/versions/oreo/background-location-limits测试
2.后台服务限制:大数据
限制应用在后台运行服务,并禁止应用经过隐藏/不可见方式调用 CPU 或网络资源。优化
相关连接:https://developer.android.google.cn/about/versions/oreo/background#servicesui
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
如图所示,如下是Doze模式各状态说明:
ACTIVE: 设备活动态
INACTIVE:设备不活跃(灭屏、不运动) 等待进入idle.
IDLE_PENDING: 设备准备进入下一阶段
SENSING: 传感器检测设备是否运动
LOCATING: 设备位置变化.
IDLE: 设备进入idle,并尽可能长时间保持该状态
IDLE_MAINTENANCE: 退出idle进入“维护期”
谷歌还引入了Light-Doze(Android N)和Deep-Doze(Android M)的概念,具体内容以下:
5.应用待机群组
应用待机群组对应用进行分组管理,不一样的分组享有不一样的权限设置,杜绝了对应用一刀切的现象。
相关连接:https://developer.android.google.cn/preview/features/power#buckets
应用待机分组:
1)活跃 (Active): 应用正在被使用
2)工做 (Working set): 应用使用频率很高
3)经常使用 (Frequent): 应用常常但不是天天被使用
4)极少 (Rare): 应用偶尔被使用
5)从不(Never):安装后一次都未被使用过的应用
分组策略:
调试:
经过adb命令将应用手动划分至某一待机群组。输入如下命令,更改群组:
$ adb shell am set-standby-bucket packagename active/working_set/frequent/rare
输入如下命令,查看应用所处群组:
$ adb shell am get-standby-bucket [packagename]
为促进用户体验,谷歌对应用在后台状态下的建议以下:
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.网络
推荐绿色机制:
3.Wakelock
推荐绿色机制:
1.Battery Historian
相关连接:https://developer.android.google.cn/topic/performance/power/battery-historian
2. AT&T Application Resource Optimizer
擅长于网络跟踪
相关连接:
https://developer.att.com/application-resource-optimizer
3. 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