Android 11之后如何在安卓应用内获取CPU使用率?
Android 11+ 普通应用获取CPU使用率的可行方案
针对你提出的Android 11之后普通应用无法通过/proc/stat和HardwarePropertiesManager获取CPU使用率的问题,以下是几种可行的解决方案:
1. 计算自身应用的CPU使用率(基于Debug类)
普通应用可通过Debug类API计算自身进程/线程的CPU使用情况,无需特殊权限:
- 调用
Debug.threadCpuTimeNanos()获取当前线程的CPU占用时间(纳秒级) - 用
System.currentTimeMillis()记录当前系统时间 - 间隔固定时长(如1秒)后再次获取两个时间值,通过公式计算线程CPU使用率:
// 核心逻辑示例 long startTime = System.currentTimeMillis(); long startCpuTime = Debug.threadCpuTimeNanos(); Thread.sleep(1000); long endTime = System.currentTimeMillis(); long endCpuTime = Debug.threadCpuTimeNanos(); long elapsedTime = endTime - startTime; long cpuTimeUsed = (endCpuTime - startCpuTime) / 1000000; // 转换为毫秒 double cpuUsage = (cpuTimeUsed * 100.0) / elapsedTime; - 若需获取整个应用的CPU使用率,可遍历进程内所有线程,累加各线程CPU时间后再按上述逻辑计算。
2. 使用StatsManager(Android 12及以上)
Android 12(API 31)引入的StatsManager允许普通应用收集系统与应用的性能统计数据,包含CPU使用率:
- 申请
android.permission.PACKAGE_USAGE_STATS权限,该权限需用户在系统设置的「权限管理-使用情况访问权限」中手动授予 - 通过
StatsManager注册StatsSubscription,指定要收集的CPU相关指标(如Metric.CPU_USAGE) - 订阅后可定期获取应用自身或全局的CPU使用率数据
3. 调试场景补充
若仅用于开发调试,可通过以下方式快速获取:
- 使用Android Studio的Profiler工具,实时查看应用CPU使用率
- 执行adb命令:
adb shell top -n 1 -p <你的应用PID>,直接查看应用CPU占用情况
内容的提问来源于stack exchange,提问作者david
相关产品推荐
相关产品推荐

