背景
钉钉作为亿级企业数字化平台,高效即时沟通是核心能力之一,消息即时触达以及后台功耗一直是 Android 端核心体验,随着业务快速的发展,越来越多的消息信令通过钉钉自有的长连接通道推送到客户端,同时手机续航也是用户和手机厂商关心的核心体验之一。
面临的问题
在钉钉快速发展的过程中,我们收到部分用户反馈钉钉异常耗电的体验问题,主要问题集中在以下三类:
第一类问题:系统手机管家提示“钉钉后台耗电过快”。这类高耗电问题常常在用户无预期的情况下出现,尤其是在系统频繁弹出这种耗电异常的提示时,用户体验非常不好。
第二类问题:后台异常耗电严重。通常的情况是,用户反馈自己并没有在使用手机,但是手机却没电了,一看系统里的耗电排行榜,发现钉钉耗电占比大。对于这种异常耗电问题用户很疑惑,为什么后台耗电这么多?
第三类问题:前台高耗电。用户反馈使用视频类功能,耗电高,手机烫。当手机过烫的时候,还会出现过温导致应用退出、手机不可用的问题。对于这一类的问题,针对性做场景功耗优化即可。App 高耗电直接影响用户的手机续航,非常影响用户体验以及产品口碑,大大降低用户的使用意愿。针对异常功耗问题,我们发起了功耗优化专项,致力于解决异常耗电问题,提升用户体验。
挑战
Android App 功耗问题不同于 Crash、ANR 等领域有现成的成熟解决方案。Android 系统通过软件估算应用的耗电量,但是应用拿不到这个估算的电量值。同时,功耗问题通常是综合性问题,造成耗电的原因也多种多样。主要面临的挑战如下:
系统的异常耗电提醒规则和标准不明确
在应用出现异常耗电的情况下,系统会通过通知给用户提示该应用有高耗电的行为。从应用的视角来看,系统异常耗电提醒应用侧无法感知,提醒规则和标准对应用来讲是黑盒。这对于应用侧快速定位根因,解决用户问题提升了难度。
缺少现场信息,难复现
当用户反馈高耗电问题,通常不明确什么场景下出现的,用户只能提供系统的应用耗电排行和应用耗电详情。这些信息能提供一个大概的排查方向,缺少更为详细明确的现场信息,难以复现,大多情况下无法直接定位根因。
排查手段有限
耗电排行和应用耗电详情
用户反馈问题后,最直观的数据就是手机系统的耗电排行和应用耗电详情。但是没有详细信息,对于定位问题并没有太大帮助。
Bugreport + Battery Historian
除了系统的应用耗电排行和应用耗电详情之外,最主要的手段是利用 Android 的 Bugreport 结合 Battery Historian 来排查电量问题。Bugreport 日志有系统的电量统计数据,这个对于我们定位耗电原因有很大的帮助。但是,也有一些不足。
首先,针对手机管家的高功耗提醒与 Bugreport 并非一一对应,难以直接定位原因;其次,Bugreport 没有堆栈信息,比如通过 Bugreport 能看到耗电的大头是 WiFi 、移动网络或蓝牙扫描等,但具体是代码里的哪一行代码调用的还是不好排查。
另外,从实际操作上来说,Bugreport 获取比较麻烦,也需要在问题出现后及时导出,否则会错过问题现场,同时也依赖用户配合提供 Bugreport 日志。
因此,Bugreport 更适合线下分析功耗问题。
Battery Historian 示例
优化效果无法评估
最后,由于耗电量在应用侧没有一个可以量化的指标,当解决了某个功耗问题,只能靠持续回访用户长期观察和对比来判断是否有效,样本量较小,比较难通过量化指标来评估优化效果。
功耗优化方向
根据上述我们主要的功耗问题、排查过程以及面临的挑战,我们梳理了功耗优化方向,如下图:
- 感知能力:建立线上功耗监控能力以及异常耗电模型,主动发现异常耗电问题以及场景。
- 快速定位能力:通过异常耗电监控及电量报告,快速定位异常耗电问题根因。
- 问题治理:结合异常耗电根因,针对性解决潜在的高功耗风险。
- 防劣化能力:通过主动感知能力,及时感知并解决新增变更引起的高功耗风险。
功耗优化总体设计
目标
- 为用户提供极致体验的低功耗应用,彻底解决应用功耗问题
- 建设功耗感知-治理-防劣化体系能力
总体设计
- 感知能力
针对线上异常耗电无法主动感知的问题:根据系统电量统计原理,全面监控钉钉各个功耗相关部件的使用情况,结合 Android Vitals 异常耗电标准以及系统提醒维度来明确监控指标以及基线,建设异常耗电诊断方案,主动发现异常耗电问题及场景。 - 快速定位能力
针对功耗问题难定位难排查的问题:周期性地采样功耗部件的使用数据,统计生成电量报告,展示各个模块功耗使用情况和头部问题;通过电量报告及异常耗电检测,快速定位异常耗电问题根因。 - 防劣化能力
针对线上功耗体验无法衡量的问题,我们提出功耗健康分指标衡量整体的线上功耗体验。同时,也为了防止后续功耗出现劣化情况,我们建设功耗体验指标体系,从功耗部件健康分、异常率等指标及时洞察潜在的新增功耗风险。 - 治理优化
结合感知能力以及快速定位能力,梳理应用潜在的功耗异常问题,推动问题治理优化,彻底解决功耗体验问题,为用户提供低功耗的极致体验。
下面针对其中核心的关键能力进行详细的介绍。
更多精彩内容,欢迎观看:
钉钉 Android 端功耗优化最佳实践(中):https://developer.aliyun.com/article/1262697?groupCode=alibabaf2e