如何在android设备上读取cpu频率[关闭]

Posted

技术标签:

【中文标题】如何在android设备上读取cpu频率[关闭]【英文标题】:How to read cpu frequency on android device [closed] 【发布时间】:2011-03-02 13:16:23 【问题描述】:

是否有任何 Java API 可以做到这一点?我如何阅读这些信息。

【问题讨论】:

【参考方案1】:

要在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"

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

【讨论】:

真棒回答埃利斯,你真的帮了我很多。我在调查时发现的一件事是 scaling_cur_freq 不一定是当前的 CPU 频率,而是内核认为的频率。要获得真实频率,您需要 root 访问权限才能读取 cpuinfo_cur_freq。此外,获得 root 访问权限允许您设置 cpu 速度,这对于在最佳/最坏情况下进行分析非常有用。 嗯,在我看来,即使有 root 访问权限,您也无法编辑 cpuinfo_* 文件.. 我们如何获得 CPU 负载或利用率? 如何从应用程序中读取这些文件? 我注意到/sys/devices/system/cpu/cpufreq/下的子目录policyX,那是什么?【参考方案2】:

不是 MHz,但至少是一些东西。 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 或在某处读取? 有什么理由不只是将 /proc/cpuinfo 作为文件打开并直接读取它? michael,阅读关于 bogoMIPS 的 wiki 页面,有一个公式。 fadden,我不确定该文件是否可以简单地从 java 中读取,只是发现这段代码放在周围。【参考方案3】:

如果您对系统在什么状态下花费了多长时间感兴趣,请查看文件

/sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state

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

【讨论】:

root 访问似乎不是必需的,不像cpuinfo_cur_freq

以上是关于如何在android设备上读取cpu频率[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 Android 设备的CPU核数,时钟频率以及内存大小

如何获取 Android 设备的CPU核数时钟频率以及内存大小

android如何强制cpu核心离线(关闭核心)

对 Android 设备 CPU 进行锁频

android 如何实时修改cpu频率

cpu开启节能或者关闭方法及原理