造成手机耗电的主要因素可以分为硬件和软件两方面,作为应用开发者,只能从软件方面发力,应用低功耗开发就显得尤其重要。
谷歌和华为在功耗管理方面的机制到底是怎么样的,应用在开发时资源如何配置才能达到最佳的功耗方案?
本期,由华为终端功耗架构师钱华君为大家带来《应用低功耗开发探讨》,解析应用耗电这点事。
绿盟功耗标准解读
1、手机耗电因素有哪些?
硬件视角:
SoC(CPU、GPU、NPU、DDR 等)、屏幕、Modem、 WiFi、 Audio、Camera、GPS、 Sensors、FlashLight、BlueTooth、NFC 等。
软件视角:
进程/线程-Alarm、BroadcastMsg、 Notifications、Wakelock、Interrupt 等。
应用在开发过程需要关注可能会用到的器件,在灭屏后台使用时不涉及到屏幕功耗等。
2、应用耗电情况用户画像
据大数据统计分析发现,随着无限流量的套餐的推出,用户亮屏使用时长、日均数据流量呈上升趋势。下图是基于大数据分析,样本采取不同年龄阶段的平均数值得出的。
用户经常使用的应用是浏览类和社交类,分别占比是 24%、21%,其次是游戏、短视频等。而这些应用分类中,游戏类、视频类应用相对耗电较高,所以在应用开发过程中要格外关注。另外我们还发现,当应用耗电较低时更有可能使用户使用该应用的时间变长。
3、绿盟功耗标准简要解析
联盟功耗标准依据常见的应用使用场景对手机硬件设备的需求度进行了粗略划分,并在对应的情况下给出了例子以及参考的设备使用标准以及使用规范。
标准 2.0 主要关注的是后台的应用,为了进一步提升用户应用使用体现,联盟正联合各专家制定标准 3.0,新标准中会增加一些对前台应用的功耗的约束,欢迎大家持续关注。
谷歌和华为功耗管理方案
1、谷歌后台功耗方案
为了改善续航表现和用户体验,Android 在版本演进中提供如下方案:
谷歌的分组机制
这个分组机制是谷歌首次提出来的,今年的 Android Q 版本的待机分组机制算法做了一些优化,可以分成以下五类:
分组策略:
2、华为后台功耗方案
华为的后台功耗方案,在谷歌的后台功耗方案基础上做了一些增强。第一条是要豁免正常业务的资源使用,保证业务的资源不受到任何限制,这个主要依赖于准确的识别出哪些是用户正在感知的业务,如果不是用户正常使用的业务,可能也要做一些资源方面的限制,比如持组、频繁唤醒、应用频繁自启等。
华为 PUSH 通道
谷歌的通用 PUSH 方案是 FCM,但这个机制只适用海外,国内的应用厂商一般都有自己的 PUSH 通道,华为也不例外。比如应用先发到华为的 PUSH,然后发到指定的手机里面,通过一个消息通知中心,在手机屏幕上面就会显示收到什么通知,点开通知的时候应用就会拉起,如果只有看的动作应用本身不会被拉起,可能还会在后台休眠,通过这种方式我们可以做到一个比较省电的目的。
资源使用建议及工具推荐
1、资源使用建议
定时任务
网络
Wakelock
2、资源使用检测工具
BatteryHistorian
在开发安卓应用的时候,如何保证开发出来的软件在资源使用上是正常的,这里推荐大家使用 BatteryHistorian,它可以分析出资源使用的情况。进入开发者模式,操作执行完了之后会把所有的信息进入到一个文件里面,只需要把这个文件上传到服务端,就会出现使用介绍。
更多信息可访问:https://developer.android.google.cn/topic/performance/power/battery-historian
AT&T ApplicationResource Optimizer 诊断工具
这款工具擅长网络跟踪。
更多信息可访问:https://developer.att.com/application-resource-optimizer
Android vitals 工具
对应用过度唤醒、wifi 扫描、网络使用、长时间持唤醒锁、进行监控,并输出报告。
更多信息可访问:https://developer.android.google.cn/topic/performance/vitals
小结
研发阶段:
1. 推送远程通知消息,需使用 FCM 或华为 PUSH NC;
2. 用户触发的后台业务,需使用前台服务 + 常驻通知;
3. 非用户触发可推迟的任务,需使用 JobScheduler/WorkManager;
4. 合理使用 Alarm,Wakelock,Network,GPS 等软硬资源;
测试验收:
借助工具,使用 battery-historian、 ARO、Android vitals 分析运行时和长待机情况。
反对:
恶意保活,包括无声播放、一像素界面、低流量下载等。