更多精彩内容,欢迎观看:
钉钉 Android 端功耗优化最佳实践(中):https://developer.aliyun.com/article/1262697?groupCode=alibabaf2e
防劣化能力
如前文所说,不同于 Crash、ANR 等问题,耗电量在线上是没有一个可以量化的指标的,所以线上用户功耗体验如何,我们的优化是否有效果,是否解决了用户反馈的功耗问题,有无新增的功耗问题等,从应用治理的视角来看,监控能力是防劣化的有效手段。
主要策略
建立线上功耗体验指标体系
由于 App 获取不到直接的电量值,需要有一个指标去量化衡量整体的线上功耗体验,代替电量值这个指标。且功耗涉及多个模块的使用,在我们有了各个功耗部件的使用数据之后,这个指标还需要是一个综合指标。鉴于此,我们提出了功耗健康分的指标,用于衡量一次退后台的生命周期内功耗体验整体优劣情况。
功耗健康分:对一条退后台数据,对各个单项指标进行评分,再以各个模块使用对功耗的影响程度转换为权重系数求和相加得到健康分。
健康分计算:
建设功耗体验报表:感知功耗体验核心指标的优劣和变化趋势。主要包含三个部分:功耗健康分、异常功耗、功耗部件单项指标。
- 功耗健康分:归一化各个功耗部件的使用情况进行健康分评估,反映钉钉后台整体的功耗体验;
- 异常功耗:反映各类功耗异常的总数和异常率的变化,以及每一类异常的主要归因;
- 功耗部件单项指标:反映钉钉后台各个功耗部分上详细的使用情况。
因此,对于钉钉线上功耗体验,有了明确的数据指标衡量体系,能够量化地感知功耗体验和异常问题。不再是依赖用户反馈或者主观使用感受。通过线上功耗体验指标,曾有效地帮我们感知到线上变更引起的高功耗问题;也用于整体衡量我们每个迭代功耗治理优化的效果。
功耗治理实践
基于功耗的监控感知能力,上线后帮助我们累计发现数十例潜在功耗问题,根据问题的严重程度我们依次进行了优化治理。
治理策略
功耗的优化治理,主要是两方面的工作。首先,针对后台重度消息收发引起的网络频繁使用问题,我们研发了“低功耗模式”。同时,在每个迭代中,针对各个功耗模块潜在的问题进行治理。
低功耗模式
针对重度消息收发场景引起的网络频繁唤醒问题,我们研发了“低功耗模式”。
低功耗模式主要思想是将消息进行分层,当 App 处于后台的情况下,服务端采用分级、延迟、合并等推送策略,有效解决网络唤醒频繁的问题。
- 当 App 处于后台时对于低优先级事件(如免打扰消息)不进行推送。
- 用户设置低功耗模式后,App 处于后台时:
对于中优先级事件(如普通群消息),按用户设定的时间间隔进行延迟合并推送。
对于高优先级事件(如单聊、VIP 消息),立即推送,且合并未推送的中优先级事件推送。
经过验证,低功耗模式开启后,能有效降低重度用户后台耗电量近 70%。
功耗问题治理
在日常迭代中,持续去对潜在功耗问题进行治理和优化。主要问题分为这几类:
- 后台网络异常频繁收发治理:优化后台异常的、不必要的频繁网络收发;智能心跳优化等。
- 后台系统服务调用治理:Alarm 频繁唤醒问题,长期持有亮屏唤醒锁阻止系统休眠问题治理,长期持有部分唤醒锁阻止系统休眠问题治理,蓝牙频繁扫描等。
- 应用后台自启动优化:进程异常频繁自杀问题,优化粘性 Service 自启动以及子进程跨进程调用拉起主进程行为。
- CPU 高负载场景治理等:长耗时线程优化、动画泄露治理、死循环治理等。
治理效果
通过对感知到的头部问题治理后,线上功耗体验也有明显的效果体现:
- 异常次数/异常率:功耗异常总数和功耗异常率下降 50% 以上
- 功耗健康分:整体功耗健康分维持 99.9 以上(治理前在95分)
- 用户体验:用户舆情反馈得到明显收敛,有效提升用户体验
- 获得金标应用认证:通过金标联盟功耗标准基线测试
总结
在功耗体系化能力建设的同时,持续治理优化潜在的功耗问题,大幅提升用户体验,为用户提供低功耗的体验。未来我们还会不断精进优化 App 体验,持续为用户打造极致用户体验而努力。