如何在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核数,时钟频率以及内存大小