钉钉作为亿级企业数字化平台,高效即时沟通是核心能力之一,消息即时触达以及后台功耗一直是 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 端功耗优化最佳实践(中):https://developer.leiyu.cn/article/1262697?groupCode=alibabaf2e
Copyright © 2023 leiyu.cn. All Rights Reserved. 磊宇云计算 版权所有 许可证编号:B1-20233142/B2-20230630 山东磊宇云计算有限公司 鲁ICP备2020045424号
磊宇云计算致力于以最 “绿色节能” 的方式,让每一位上云的客户成为全球绿色节能和降低碳排放的贡献者