Android发热监控实践
背景
相信移动端高度普及的现在,大家或多或少都会存在电量焦虑,拥有过手机发热发烫的糟糕体验。而发热问题是一个长时间、多场景的指标存在,且涉及到端侧应用层、手机 ROM 厂商系统、外界环境等多方面的影响。如何有效衡量发热场景、定位发热现场、以及归因发热问题成为了端侧应用层发热监控的面前的三座大山。本文通过得物 Android 端侧现有的一些监控实践,不深入功耗计算场景无法自拔,优先聚焦于发热场景本身,希望能给大家一些参考。二
发热定义
温度是最直观能反映发热问题的指标,当前 Android 侧,我们以体感温度 37° 以上作为分界线,向上每 3° 作为一个发热温度区间,区间细分上限温度 49° ,即划分出 37-40,40-43,43-46,46-49,49+ 五个等级。以手机温度、CPU 使用率作为第一、第二要素来判断用户是否发热的同时,获取其他参数来支撑发热现场情况。
具体指标如下:
手机温度 CPU 使用率、GPU 使用率;
线程堆栈;
系统服务使用频次;
设备前后台、亮灭屏时长;
电量、充电情况;
热缓解发热等级;
系统机型、版本;
....
三
指标获取
温度
电池温度系统 BatteryManger 已经提供了一系列自带的接口和粘性广播获取电池信息。BatteryManager.EXTRA_TEMPERATURE 广播,获取的温度值是摄氏度为单位的 10 倍数值。//获取电池温度BatteryManager.EXTRA_TEMPERATURE,华氏温度需要除以10fun getBatteryTempImmediately(context: Context): Float {
return try {
val batIntent = getBatteryStickyIntent(context) ?: return 0f
batIntent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, 0) / 10F
} catch (e: Exception) {
0f
}
}
private fun getBatteryStickyIntent(context: Context): Intent? {
return try {
context.registerReceiver(null, IntentFilter(Intent.ACTION_BATTERY_CHANGED))
} catch (e: Exception) {
null
}
}
BatteryManager 除支持电池温度的系统广播外,也包含电量、充电状态等额外信息的读取,均定义在其源码中。
四
监控方案
了解核心指标数据是如何获取的前提下,其实监控方案的核心思路无非就是通过远端 APM 配置中心下发的采样阈值、采样周期、各模块数据开关等限定采样配置,子线程 Handler 定时发消息,采集各个模块的数据进行组装,在合适的时机进行数据上报即可,具体的数据拆解、分析工作则由发热平台进一步处理。
模块整体架构

上报时机

核心采集流程

线上线下区分
由于所有子线程的 CPU 采集、堆栈采集实际上是会对性能有折损的,200+ 的线程的读取耗时整体在 200ms 左右,采样子线程的 CPU 使用率在 10%,考虑到线上用户体验问题,并不能全量开启高频率采样。


故整体方案来说: 线下场景以重点侧重发现、排查、治理全量问题,上报全量日志,以 CPU、GPU 使用率为第一衡量指标;
线上场景以重点侧重观察整体发热大盘趋势、分析潜在问题场景,上报核心日志,以电池温度为第一衡量指标。
发热平台在平台侧同学的支持下,发热现场数据经过平台侧进行消费,将核心的发热堆栈经过 Android 堆栈反混淆服务进行聚合,补齐充电状态、主线程 CPU 使用率、问题类型、电池温度等基础字段,平台侧就具备发现、分析、解决的流程化监控推进的能力。
具体的堆栈信息 & 发热信息平台展示如下:


由于电池温度、CPU 使用率是针对运行时发热场景最直观的指标,且我们一期重点关注发热场景的治理,不针对元器件 Hook 等耗电场景进行持续深入分析,故当前得物侧是以电池温度、CPU 使用率为第一第二指标 建立核心的发热问题四象限,优先关注高温、高 CPU 的问题场景。

在数据分析过程中,我们遇到了数据上的效率排查效率不够高、问题精度不够准的情况。
如何定位是高温场景是发生在 App 内部,且在使用过程中明显上升的? 通过过滤从启动开始即高温、后台切换回来即高温的场景,重点关注在 App 内部温度上升的场景。线上的采样后仍旧单日有 6w+ 数据的上报,我们如何筛选出更为核心的数据?当前的做法是定义了温度跨度的概念,优先看在 App 内部温度跨度较大的 Case。线程存在调用 Wait 等方法阻塞的堆栈,消耗内核态的时间分配,但实际不消耗整体 CPU 的误报数据。 补充了线程的运行状态和 Proc 文件中记录的 State,方便优先处理 RUNNABLE线程的 CPU 高温高占用问题。手机温度上升作为渐进式的场景,如何实现温度上升场景下的页面精确归因?增加温度采样频率的同时,汇总 CPU 使用率和实时堆栈等瞬时数据作为数据支撑,但考虑到数据体量的情况,数据上报聚合裁剪方式仍在逐步探索更为合理的方式,力求在两者之间找到一个平衡点。

五
收益
Android 端侧发热监控自上线以来,背靠平台侧的支撑,陆续发现了一些问题并联合开发同学做了对应场景的治理优化工作,如:
耗时独立线程任务 接入统一线程池调度管理;
动画执行死循环监测修复;
高 IO 场景的文件读写策略优化;
高并发任务锁粒度优化;
日志库等 Json 解析频繁场景 采用效率更高的序列化方;
系统相机等系统功率过高的采集参数设备分级尝试;
基于 Webgl 的游戏场景 帧率降低和资源及时回收优化运行时内存;
....
这无疑给未来体验工作的场景技术选型、技术实现沉淀了一些有价值的经验,符合对 App 体验追求极致的高标准、高要求。
六
未来展望
手机发热作为渐进式的体验场景,涉及手机硬件、系统服务、软件使用、外界环境多方位因素。对于端侧的排查上来说,当前优先级聚焦于应用层的不合理使用上。对于排查工具链路增强、问题业务归因、低电量、低功耗模式下的动态策略降低、自动化诊断报告等环节仍旧有很多值得深入挖掘的点,例如:
监控/工具增强
App 浮层分析工具 (CPU\GPU/频率/温度/功耗等信息)借鉴 BatteryHistorian、SnapdragonProfiler、Systrace 等工具,实现自研TeslaLab 能力增强。业务归因
发热堆栈自动分配调用溯源归因精细化场景策略、降级
CPU 调频、动态帧率、分辨率降级端内低功耗模式探索自动化诊断报告
单用户定向自动化分析输出诊断报告七
总结
在此也只是粗略介绍当前已经做的针对发热治理的一些初步工作,以及对未来发热功耗相关开展的思路。希望能让 App 带来更好的体验,给用户带来更对美好事物的向往的感受。作者:GavinX
来源:微信公众号:得物技术
出处:https://mp.weixin.qq.com/s/aq1OeHqRmkxeKZK53FBjiw
相关资讯
-
iOS,Android升级变卡顿,过热,续航差?从内核到应用的深度解析
IOS,Android升级变卡顿,过热,续航差?升级背后的隐患: 从内核到应用的深度解析android升级到较新的操作系统似乎是让老旧硬件焕发新生的理想选择,但现实往往残酷。升级后...
-
Android 16发布时间提前,未来更新速度将加快
据了解,谷歌通常间隔一年左右更新下一代系统,不过近期爆料显示,该发布规律或将被打破。当前,Android 15系统还没有完全被搭载,然而下一代Android 16的发布时间已经被曝...
-
警惕!安卓手机用户面临严重漏洞 涉及Android 11到13
据手机中国了解,近日有外媒报道称,印度政府警告安卓手机用户注意严重漏洞。该警报针对使用Android 11、12、12L和13的用户,目前不同版本的Android系统中均发现了多个...
-
Google发布新Android安全功能,旨在防止欺诈和盗窃
在周二的 Android Show 上,也就是Google I/O 开发者大会之前,Google宣布了 Android 的全新安全和隐私功能。这些新功能包括对通话、屏幕共享、消息、...
-
Android应用概述
Android SDK 工具会将您的代码连同任何数据和资源文件编译成一个 APK(Android 软件包),即带有 .apk 后缀的归档文件。每个 Android 应用都处于各自的...
-
Android14出现严重问题,影响存储空间正常使用,谷歌向用户道歉
10月29日消息,近期,Android 14 系统出现了一个严重的问题,可能会影响多用户模式下的设备的存储空间的正常使用。最近,越来越多的Android 14用户发现,在多用户模式...
-
2025年500元左右性价比手机市场深度评测:百元机市场真实力解析
在智能手机价格普遍上涨的背景下,500元价位段已成为厂商竞争的底线战场。尽管利润空间被压缩至极限,但仍有红米、vivo、OPPO、荣耀等品牌持续深耕该领域。通过技术下放与供应链...
-
《英雄联盟:云顶之弈》迎来6周年庆典,时光机再次启动,丰厚奖励等你来拿!
《英雄联盟:云顶之弈》6周年活动于6月12日在PC端发布《英雄联盟:云顶之弈》马上六岁了,欢迎大家来一起庆祝。6月12日起,云顶之弈时光机将作为6周年活动的一部分回归,呈现众多往届...
-
iPhone的一些小知识
iPhone 12 在过热时可能会自动暂停或减缓充电,这是苹果为了保护电池健康和设备安全所设定的一项机制。 iPhone 12 过热时的充电保护机制包括:✅ 1.自动暂停或减缓充电...
-
《王者荣耀》新英雄孙权即将亮相,但配音遭遇众多玩家批评!
大家好,我是戒戒。专注于分享游戏心得和趣事的戒戒《王者荣耀》S40赛季“三分之地”即将于2025年5月25日上线,新英雄孙权作为第126位角色,以“射手/战士双形态”定位引发关注。...