如何在安卓设备上读取CPU频率

26

有没有Java的API可以做到这一点?我该如何读取这些信息。

3个回答

50

要在Android上获得频率,只需读取/sys目录中的这些特殊文件:

#cat "/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq"
#cat "/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq"
#cat "/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq"

你将拥有当前频率、最小允许频率和最大允许频率。


3
Ellis的回答非常棒,你真的帮了我很多。在调查中,我发现scaling_cur_freq并不一定是当前CPU频率,而是内核认为的频率。要获得实际频率,您需要root权限来读取cpuinfo_cur_freq。此外,获取root访问权限还允许您设置CPU速度,在最佳/最坏情况下进行性能分析非常有用。 - JonnyBoy
嗯,我觉得即使有root访问权限,也无法编辑cpuinfo_*文件。 - JohnTortugo
我们如何获取CPU负载或利用率? - Ashkan
这些文件如何在应用程序内被读取? - Cornelius Roemer
我注意到在/sys/devices/system/cpu/cpufreq/下有一个名为policyX的子目录,那是什么? - user1651758

8

不是兆赫,但至少有点什么。bogoMIPS 值可能对您有用。

private String ReadCPUinfo()
 {
  ProcessBuilder cmd;
  String result="";

  try{
   String[] args = {"/system/bin/cat", "/proc/cpuinfo"};
   cmd = new ProcessBuilder(args);

   Process process = cmd.start();
   InputStream in = process.getInputStream();
   byte[] re = new byte[1024];
   while(in.read(re) != -1){
    System.out.println(new String(re));
    result = result + new String(re);
   }
   in.close();
  } catch(IOException ex){
   ex.printStackTrace();
  }
  return result;
 }

谢谢,但有没有办法将其转换为MHz或在某个地方读取它? - michael
11
为什么不直接打开/proc/cpuinfo文件并直接读取它呢? - fadden
迈克尔,阅读有关 bogoMIPS 的维基页面,里面有一个公式。法登,我不确定这个文件是否可以简单地从 Java 中读取,只是发现这段代码放在那里。 - zed_0xff

4
如果您对系统在不同状态下花费的时间感兴趣,请查看该文件。
/sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state

我不确定是否需要 root 权限。

该句话涉及 IT 技术,但没有具体上下文,无法提供更多信息。

似乎不需要root访问权限,与cpuinfo_cur_freq不同。 - Vi.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接