钉钉 Android 端功耗优化最佳实践(上)

简介: 钉钉 Android 端功耗优化最佳实践(上)

背景

钉钉作为亿级企业数字化平台,高效即时沟通是核心能力之一,消息即时触达以及后台功耗一直是 Android 端核心体验,随着业务快速的发展,越来越多的消息信令通过钉钉自有的长连接通道推送到客户端,同时手机续航也是用户和手机厂商关心的核心体验之一。

面临的问题

在钉钉快速发展的过程中,我们收到部分用户反馈钉钉异常耗电的体验问题,主要问题集中在以下三类:

第一类问题:系统手机管家提示“钉钉后台耗电过快”。这类高耗电问题常常在用户无预期的情况下出现,尤其是在系统频繁弹出这种耗电异常的提示时,用户体验非常不好。

第二类问题:后台异常耗电严重。通常的情况是,用户反馈自己并没有在使用手机,但是手机却没电了,一看系统里的耗电排行榜,发现钉钉耗电占比大。对于这种异常耗电问题用户很疑惑,为什么后台耗电这么多?

第三类问题:前台高耗电。用户反馈使用视频类功能,耗电高,手机烫。当手机过烫的时候,还会出现过温导致应用退出、手机不可用的问题。对于这一类的问题,针对性做场景功耗优化即可。App 高耗电直接影响用户的手机续航,非常影响用户体验以及产品口碑,大大降低用户的使用意愿。针对异常功耗问题,我们发起了功耗优化专项,致力于解决异常耗电问题,提升用户体验。

挑战

Android App 功耗问题不同于 Crash、ANR 等领域有现成的成熟解决方案。Android 系统通过软件估算应用的耗电量,但是应用拿不到这个估算的电量值。同时,功耗问题通常是综合性问题,造成耗电的原因也多种多样。主要面临的挑战如下:

系统的异常耗电提醒规则和标准不明确

在应用出现异常耗电的情况下,系统会通过通知给用户提示该应用有高耗电的行为。从应用的视角来看,系统异常耗电提醒应用侧无法感知,提醒规则和标准对应用来讲是黑盒。这对于应用侧快速定位根因,解决用户问题提升了难度。

缺少现场信息,难复现

当用户反馈高耗电问题,通常不明确什么场景下出现的,用户只能提供系统的应用耗电排行和应用耗电详情。这些信息能提供一个大概的排查方向,缺少更为详细明确的现场信息,难以复现,大多情况下无法直接定位根因。

排查手段有限

耗电排行和应用耗电详情

用户反馈问题后,最直观的数据就是手机系统的耗电排行和应用耗电详情。但是没有详细信息,对于定位问题并没有太大帮助。

Bugreport + Battery Historian

除了系统的应用耗电排行和应用耗电详情之外,最主要的手段是利用 Android 的 Bugreport 结合 Battery Historian 来排查电量问题。Bugreport 日志有系统的电量统计数据,这个对于我们定位耗电原因有很大的帮助。但是,也有一些不足。

首先,针对手机管家的高功耗提醒与 Bugreport 并非一一对应,难以直接定位原因;其次,Bugreport 没有堆栈信息,比如通过 Bugreport 能看到耗电的大头是 WiFi 、移动网络或蓝牙扫描等,但具体是代码里的哪一行代码调用的还是不好排查。

另外,从实际操作上来说,Bugreport 获取比较麻烦,也需要在问题出现后及时导出,否则会错过问题现场,同时也依赖用户配合提供 Bugreport 日志。

因此,Bugreport 更适合线下分析功耗问题。

Battery Historian 示例

优化效果无法评估

最后,由于耗电量在应用侧没有一个可以量化的指标,当解决了某个功耗问题,只能靠持续回访用户长期观察和对比来判断是否有效,样本量较小,比较难通过量化指标来评估优化效果。

功耗优化方向

根据上述我们主要的功耗问题、排查过程以及面临的挑战,我们梳理了功耗优化方向,如下图:

  1. 感知能力:建立线上功耗监控能力以及异常耗电模型,主动发现异常耗电问题以及场景。
  2. 快速定位能力:通过异常耗电监控及电量报告,快速定位异常耗电问题根因。
  3. 问题治理:结合异常耗电根因,针对性解决潜在的高功耗风险。
  4. 防劣化能力:通过主动感知能力,及时感知并解决新增变更引起的高功耗风险。

功耗优化总体设计

目标

  1. 为用户提供极致体验的低功耗应用,彻底解决应用功耗问题
  2. 建设功耗感知-治理-防劣化体系能力

总体设计

  1. 感知能力
    针对线上异常耗电无法主动感知的问题:根据系统电量统计原理,全面监控钉钉各个功耗相关部件的使用情况,结合 Android Vitals 异常耗电标准以及系统提醒维度来明确监控指标以及基线,建设异常耗电诊断方案,主动发现异常耗电问题及场景。
  2. 快速定位能力
    针对功耗问题难定位难排查的问题:周期性地采样功耗部件的使用数据,统计生成电量报告,展示各个模块功耗使用情况和头部问题;通过电量报告及异常耗电检测,快速定位异常耗电问题根因。
  3. 防劣化能力
    针对线上功耗体验无法衡量的问题,我们提出功耗健康分指标衡量整体的线上功耗体验。同时,也为了防止后续功耗出现劣化情况,我们建设功耗体验指标体系,从功耗部件健康分、异常率等指标及时洞察潜在的新增功耗风险。
  4. 治理优化
    结合感知能力以及快速定位能力,梳理应用潜在的功耗异常问题,推动问题治理优化,彻底解决功耗体验问题,为用户提供低功耗的极致体验。

下面针对其中核心的关键能力进行详细的介绍。


更多精彩内容,欢迎观看:

钉钉 Android 端功耗优化最佳实践(中):https://developer.aliyun.com/article/1262697?groupCode=alibabaf2e


相关文章
|
12月前
|
移动开发 监控 Android开发
Android & iOS 使用 ARMS 用户体验监控(RUM)的最佳实践
本文主要介绍了 ARMS 用户体验监控的基本功能特性,并介绍了在几种常见场景下的最佳实践。
843 105
|
14天前
|
存储 消息中间件 人工智能
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
79 10
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
|
7月前
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
1326 77
|
5月前
|
缓存 编解码 Android开发
Android内存优化之图片优化
本文主要探讨Android开发中的图片优化问题,包括图片优化的重要性、OOM错误的成因及解决方法、Android支持的图片格式及其特点。同时介绍了图片储存优化的三种方式:尺寸优化、质量压缩和内存重用,并详细讲解了相关的实现方法与属性。此外,还分析了图片加载优化策略,如异步加载、缓存机制、懒加载等,并结合多级缓存流程提升性能。最后对比了几大主流图片加载框架(Universal ImageLoader、Picasso、Glide、Fresco)的特点与适用场景,重点推荐Fresco在处理大图、动图时的优异表现。这些内容为开发者提供了全面的图片优化解决方案。
178 1
|
存储 缓存 编解码
Android经典面试题之图片Bitmap怎么做优化
本文介绍了图片相关的内存优化方法,包括分辨率适配、图片压缩与缓存。文中详细讲解了如何根据不同分辨率放置图片资源,避免图片拉伸变形;并通过示例代码展示了使用`BitmapFactory.Options`进行图片压缩的具体步骤。此外,还介绍了Glide等第三方库如何利用LRU算法实现高效图片缓存。
170 20
Android经典面试题之图片Bitmap怎么做优化
|
12月前
|
调度 Android开发 开发者
构建高效Android应用:探究Kotlin多线程优化策略
【10月更文挑战第11天】本文探讨了如何在Kotlin中实现高效的多线程方案,特别是在Android应用开发中。通过介绍Kotlin协程的基础知识、异步数据加载的实际案例,以及合理使用不同调度器的方法,帮助开发者提升应用性能和用户体验。
189 4
|
11月前
|
安全 Android开发 iOS开发
深入探索iOS与Android系统的差异性及优化策略
在当今数字化时代,移动操作系统的竞争尤为激烈,其中iOS和Android作为市场上的两大巨头,各自拥有庞大的用户基础和独特的技术特点。本文旨在通过对比分析iOS与Android的核心差异,探讨各自的优势与局限,并提出针对性的优化策略,以期为用户提供更优质的使用体验和为开发者提供有价值的参考。
|
10天前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
154 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
|
20天前
|
Java 开发工具 Maven
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
79 6
|
3月前
|
安全 数据库 Android开发
在Android开发中实现两个Intent跳转及数据交换的方法
总结上述内容,在Android开发中,Intent不仅是活动跳转的桥梁,也是两个活动之间进行数据交换的媒介。运用Intent传递数据时需注意数据类型、传输大小限制以及安全性问题的处理,以确保应用的健壯性和安全性。
170 11

热门文章

最新文章