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

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

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

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


防劣化能力

如前文所说,不同于 Crash、ANR 等问题,耗电量在线上是没有一个可以量化的指标的,所以线上用户功耗体验如何,我们的优化是否有效果,是否解决了用户反馈的功耗问题,有无新增的功耗问题等,从应用治理的视角来看,监控能力是防劣化的有效手段。

主要策略

建立线上功耗体验指标体系

由于 App 获取不到直接的电量值,需要有一个指标去量化衡量整体的线上功耗体验,代替电量值这个指标。且功耗涉及多个模块的使用,在我们有了各个功耗部件的使用数据之后,这个指标还需要是一个综合指标。鉴于此,我们提出了功耗健康分的指标,用于衡量一次退后台的生命周期内功耗体验整体优劣情况。

功耗健康分:对一条退后台数据,对各个单项指标进行评分,再以各个模块使用对功耗的影响程度转换为权重系数求和相加得到健康分。

健康分计算:

建设功耗体验报表:感知功耗体验核心指标的优劣和变化趋势。主要包含三个部分:功耗健康分、异常功耗、功耗部件单项指标。

  1. 功耗健康分:归一化各个功耗部件的使用情况进行健康分评估,反映钉钉后台整体的功耗体验;
  2. 异常功耗:反映各类功耗异常的总数和异常率的变化,以及每一类异常的主要归因;
  3. 功耗部件单项指标:反映钉钉后台各个功耗部分上详细的使用情况。

因此,对于钉钉线上功耗体验,有了明确的数据指标衡量体系,能够量化地感知功耗体验和异常问题。不再是依赖用户反馈或者主观使用感受。通过线上功耗体验指标,曾有效地帮我们感知到线上变更引起的高功耗问题;也用于整体衡量我们每个迭代功耗治理优化的效果。

功耗治理实践

基于功耗的监控感知能力,上线后帮助我们累计发现数十例潜在功耗问题,根据问题的严重程度我们依次进行了优化治理。

治理策略

功耗的优化治理,主要是两方面的工作。首先,针对后台重度消息收发引起的网络频繁使用问题,我们研发了“低功耗模式”。同时,在每个迭代中,针对各个功耗模块潜在的问题进行治理。

低功耗模式

针对重度消息收发场景引起的网络频繁唤醒问题,我们研发了“低功耗模式”。

低功耗模式主要思想是将消息进行分层,当 App 处于后台的情况下,服务端采用分级、延迟、合并等推送策略,有效解决网络唤醒频繁的问题。

  1. 当 App 处于后台时对于低优先级事件(如免打扰消息)不进行推送。
  2. 用户设置低功耗模式后,App 处于后台时:
    对于中优先级事件(如普通群消息),按用户设定的时间间隔进行延迟合并推送。
    对于高优先级事件(如单聊、VIP 消息),立即推送,且合并未推送的中优先级事件推送。

经过验证,低功耗模式开启后,能有效降低重度用户后台耗电量近 70%。

功耗问题治理

在日常迭代中,持续去对潜在功耗问题进行治理和优化。主要问题分为这几类:

  1. 后台网络异常频繁收发治理:优化后台异常的、不必要的频繁网络收发;智能心跳优化等。
  2. 后台系统服务调用治理:Alarm 频繁唤醒问题,长期持有亮屏唤醒锁阻止系统休眠问题治理,长期持有部分唤醒锁阻止系统休眠问题治理,蓝牙频繁扫描等。
  3. 应用后台自启动优化:进程异常频繁自杀问题,优化粘性 Service 自启动以及子进程跨进程调用拉起主进程行为。
  4. CPU 高负载场景治理等:长耗时线程优化、动画泄露治理、死循环治理等。

治理效果

通过对感知到的头部问题治理后,线上功耗体验也有明显的效果体现:

  1. 异常次数/异常率:功耗异常总数和功耗异常率下降 50% 以上
  2. 功耗健康分:整体功耗健康分维持 99.9 以上(治理前在95分)
  3. 用户体验:用户舆情反馈得到明显收敛,有效提升用户体验
  4. 获得金标应用认证:通过金标联盟功耗标准基线测试

总结

在功耗体系化能力建设的同时,持续治理优化潜在的功耗问题,大幅提升用户体验,为用户提供低功耗的体验。未来我们还会不断精进优化 App 体验,持续为用户打造极致用户体验而努力。


相关文章
|
21天前
|
Java Android开发
Android面试题经典之Glide取消加载以及线程池优化
Glide通过生命周期管理在`onStop`时暂停请求,`onDestroy`时取消请求,减少资源浪费。在`EngineJob`和`DecodeJob`中使用`cancel`方法标记任务并中断数据获取。当网络请求被取消时,`HttpUrlFetcher`的`cancel`方法设置标志,之后的数据获取会返回`null`,中断加载流程。Glide还使用定制的线程池,如AnimationExecutor、diskCacheExecutor、sourceExecutor和newUnlimitedSourceExecutor,其中某些禁止网络访问,并根据CPU核心数动态调整线程数。
41 2
|
21天前
|
算法 Java API
Android性能优化面试题经典之ANR的分析和优化
Android ANR发生于应用无法在限定时间内响应用户输入或完成操作。主要条件包括:输入超时(5秒)、广播超时(前台10秒/后台60秒)、服务超时及ContentProvider超时。常见原因有网络、数据库、文件操作、计算任务、UI渲染、锁等待、ContentProvider和BroadcastReceiver的不当使用。分析ANR可借助logcat和traces.txt。主线程执行生命周期回调、Service、BroadcastReceiver等,避免主线程耗时操作
24 3
|
1月前
|
缓存 JSON 网络协议
Android面试题:App性能优化之电量优化和网络优化
这篇文章讨论了Android应用的电量和网络优化。电量优化涉及Doze和Standby模式,其中应用可能需要通过用户白名单或电池广播来适应限制。Battery Historian和Android Studio的Energy Profile是电量分析工具。建议减少不必要的操作,延迟非关键任务,合并网络请求。网络优化包括HTTPDNS减少DNS解析延迟,Keep-Alive复用连接,HTTP/2实现多路复用,以及使用protobuf和gzip压缩数据。其他策略如使用WebP图像格式,按网络质量提供不同分辨率的图片,以及启用HTTP缓存也是有效手段。
46 9
|
1月前
|
设计模式 安全 前端开发
探索Android应用开发的最佳实践
【6月更文挑战第19天】在这篇文章中,我们将深入探讨Android应用开发的最佳实践。从设计模式的选择到性能优化的技巧,我们将一一解析如何构建高效、可维护且用户友好的Android应用。无论你是新手还是经验丰富的开发者,这篇文章都将为你提供有价值的见解和实用的建议。让我们一起探索Android应用开发的奥秘吧!
27 4
|
1月前
|
XML 监控 安全
Android App性能优化之卡顿监控和卡顿优化
本文探讨了Android应用的卡顿优化,重点在于布局优化。建议包括将耗时操作移到后台、使用ViewPager2实现懒加载、减少布局嵌套并利用merge标签、使用ViewStub减少资源消耗,以及通过Layout Inspector和GPU过度绘制检测来优化。推荐使用AsyncLayoutInflater异步加载布局,但需注意线程安全和不支持特性。卡顿监控方面,提到了通过Looper、ChoreographerHelper、adb命令及第三方工具如systrace和BlockCanary。总结了Choreographer基于掉帧计算和BlockCanary基于Looper监控的原理。
33 3
|
22天前
|
安全 Java 数据处理
Android多线程编程实践与优化技巧
Android多线程编程实践与优化技巧
|
24天前
|
安全 Java 数据处理
Android多线程编程实践与优化技巧
Android多线程编程实践与优化技巧
|
13天前
|
开发工具 Android开发 iOS开发
探索Android与iOS开发的差异与挑战
【7月更文挑战第11天】在移动应用开发的广阔天地中,Android和iOS两大平台如同双子星座般耀眼,各自拥有独特的开发生态和用户群体。本文将深入分析这两个平台的显著差异,从技术架构到开发工具,再到市场定位,揭示它们之间的异同。通过比较,我们不仅能够更好地理解各自的优势和局限,还能洞察未来移动应用开发的趋势。
|
9天前
|
Android开发 Kotlin
kotlin开发安卓app,如何让布局自适应系统传统导航和全面屏导航
使用`navigationBarsPadding()`修饰符实现界面自适应,自动处理底部导航栏的内边距,再加上`.padding(bottom = 10.dp)`设定内容与屏幕底部的距离,以完成全面的布局适配。示例代码采用Kotlin。
47 15
|
23小时前
|
前端开发 Android开发 iOS开发
探索安卓与iOS开发的差异性与互补性
在移动应用开发的广阔舞台上,安卓和iOS这两大操作系统各据一方,引领着市场潮流。它们在技术架构、开发环境及用户群体等方面展现出独特的差异性,同时也存在着潜在的互补性。本文将深入剖析这两种平台的开发细节,从不同角度揭示其各自优势及相互之间的协同潜力,为开发者提供全面而深刻的视角。
7 2

热门文章

最新文章