如何以编程方式获取当前CPU频率?无需Root权限实现方案
无需Root获取Android CPU当前频率的可行方案
我之前也碰到过一模一样的问题,其实很多Android设备上都有不需要Root权限就能访问的系统节点,能帮你拿到当前CPU频率,试试下面这些方法:
读取
scaling_cur_freq节点:绝大多数设备里,/sys/devices/system/cpu/cpu[0-N]/cpufreq/scaling_cur_freq这个路径的文件是普通应用就能读取的。它返回的数值单位是kHz,和cpuinfo_cur_freq的作用完全一致。你可以遍历每个CPU核心对应的路径,读取文件内容即可。给你一段Java示例代码参考:
private long getSingleCoreCurFreq(int coreIndex) { try { File freqFile = new File("/sys/devices/system/cpu/cpu" + coreIndex + "/cpufreq/scaling_cur_freq"); BufferedReader reader = new BufferedReader(new FileReader(freqFile)); String freqStr = reader.readLine().trim(); reader.close(); return Long.parseLong(freqStr); } catch (Exception e) { e.printStackTrace(); return 0; } }通过
/proc/stat间接计算频率:如果上面的节点在某些设备上无法访问,还可以用/proc/stat文件里的CPU统计信息间接算出平均频率。这个文件记录了CPU在不同状态下的累计运行时间,你可以间隔一段时间读取两次数据,结合时间差计算出这段时间内的平均频率——虽然是近似值,但对大部分UI展示场景足够用。做好设备兼容性处理:不同厂商的设备可能会有路径差异,比如部分定制系统会调整sysfs的节点位置。你可以先遍历
/sys/devices/system/cpu/下的所有cpu*目录,再逐个检查对应cpufreq目录下的scaling_cur_freq是否存在,避免出现找不到文件的异常。
另外,周期性获取频率的时候,别把间隔设得太短(比如小于1秒),不然会额外消耗系统资源。可以用Handler(Java)或者Coroutine(Kotlin)来实现定时任务,更新UI的时候一定要切回主线程哦。
内容的提问来源于stack exchange,提问作者Leo Chen
相关产品推荐
相关产品推荐

