钉钉 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


相关文章
|
19小时前
|
移动开发 安全 Android开发
构建高效Android应用:采用Kotlin协程优化网络请求
【5月更文挑战第21天】 在移动开发领域,尤其是针对Android平台,网络请求的处理一直是影响应用性能和用户体验的关键因素。随着现代应用对实时性和响应速度要求的不断提高,传统的同步阻塞或异步回调模式已不再满足开发者的需求。本文将探讨利用Kotlin协程来简化Android应用中的网络请求处理,实现非阻塞的并发操作,并提升应用的整体性能和稳定性。我们将深入分析协程的原理,并通过一个实际案例展示如何在Android项目中集成和优化网络请求流程。
|
1天前
|
缓存 移动开发 Android开发
Android应用性能优化实践
【5月更文挑战第20天】 在移动开发领域,应用的性能直接关乎用户体验。特别是对于Android平台,由于设备多样性和应用生态环境的复杂性,性能优化成为了开发者必须面对的挑战。本文将深入探讨Android应用性能优化的多个方面,包括内存管理、UI渲染、多线程处理以及电池效率等,旨在为开发者提供一系列实用的优化策略和技巧。
|
1天前
|
缓存 编解码 移动开发
构建高效Android应用:从优化布局到提升性能
【5月更文挑战第20天】 在移动开发领域,一个流畅且响应迅速的应用是用户留存的关键。本文将深入探讨如何针对安卓平台优化应用性能,涵盖从布局优化、内存管理到多线程处理等多个方面。我们将通过实例和最佳实践指导开发者避免常见的性能陷阱,并利用现代安卓工具和技巧提高应用的整体效率。
|
4天前
|
缓存 程序员 定位技术
Android Studio 插件,那些被大厂优化的程序员们
Android Studio 插件,那些被大厂优化的程序员们
|
4天前
|
设计模式 算法 前端开发
Android面经分享,失业两个月,五一节前拿到Offer,设计思想与代码质量优化+程序性能优化+开发效率优化
Android面经分享,失业两个月,五一节前拿到Offer,设计思想与代码质量优化+程序性能优化+开发效率优化
|
5天前
|
移动开发 监控 Android开发
构建高效安卓应用:Kotlin 协程的实践与优化
【5月更文挑战第16天】 在移动开发领域,性能优化一直是开发者们追求的重要目标。特别是对于安卓平台来说,由于设备多样性和系统资源的限制,如何提升应用的响应性和流畅度成为了一个关键议题。近年来,Kotlin 语言因其简洁、安全和高效的特点,在安卓开发中得到了广泛的应用。其中,Kotlin 协程作为一种轻量级的并发解决方案,为异步编程提供了强大支持,成为提升安卓应用性能的有效手段。本文将深入探讨 Kotlin 协程在安卓开发中的应用实践,以及通过合理设计和使用协程来优化应用性能的策略。
18 8
|
6天前
|
缓存 移动开发 Android开发
Android 应用性能优化实践
【5月更文挑战第15天】 在移动开发领域,应用的性能直接关系到用户体验和产品的市场表现。特别是对于安卓平台,设备的多样性和应用生态环境的复杂性使得性能优化成为开发者的一项重要技能。本文将深入探讨针对安卓应用的性能瓶颈识别、分析方法以及具体的优化策略,旨在为开发者提供一套实用的性能提升解决方案。
|
1天前
|
搜索推荐 API Android开发
安卓应用开发:打造高效通知管理系统
【5月更文挑战第20天】在移动设备中,通知管理是用户体验的关键部分。一个高效的通知系统不仅能够及时传达重要信息,还能避免用户感到不必要的干扰。本文将深入探讨如何在安卓平台上开发一个高效的通知管理系统,包括通知的设计、发送策略以及用户的个性化设置。通过分析安卓系统的通知机制和最新的API特性,我们将提供一个实用的开发指南,帮助开发者创建更加智能和用户友好的通知体验。
|
3天前
|
编解码 数据库 Android开发
安卓应用开发:打造高效用户界面的五大技巧
【5月更文挑战第18天】在竞争激烈的应用市场中,一个流畅且直观的用户界面(UI)对于安卓应用的成功至关重要。本文将探讨五种提升安卓应用用户界面性能的技巧,包括合理布局设计、优化资源使用、利用硬件加速、内存管理以及响应式编程。通过这些方法,开发者可以创建出既美观又高效的应用体验,从而吸引和保留用户。
|
4天前
|
JSON Android开发 数据格式
Android框架-Google官方Gson解析,android开发实验报告总结
Android框架-Google官方Gson解析,android开发实验报告总结