2013-03-06 37 views
1

我将如何去确定有多少个CPU在线?我有一个处理程序每​​1000毫秒运行读取当前的频率,我也想确定有多少个核心在线。Android的数量有多少cpus在线?

我一直在寻找目录“/ sys/devices/system/cpu /”。 我监视“/ SYS /设备/系统/ CPU/CPU1 /网络”,这始终是1, 我一直监视/ CPU0 /网上这也是始终为1

这个信息内核/设备专用?我如何才能找到有多少个核心以一种适用于所有设备的方式在线?

编辑: Runtime.availableProcessors()似乎很好地工作,我仍然有兴趣知道是否有一个系统文件,告诉你,如果核心是开/关?

回答

1

我试过的设备上的availableProcessors()已成功。 official Java doc中提供了该功能的更详细说明。在forum post中描述了另一种可能的解决方案。

+0

availableProcessors()似乎很好地实际工作,感谢您的帮助! – user1974977 2013-03-06 21:12:14

+0

太棒了!请接受答案,如果它解决了你的问题:) – 2013-03-06 21:21:42

0
/** 
* 
* @return integer Array with 4 elements: user, system, idle and other cpu 
* usage in percentage. You can handle from here what you want. 
* For example if you only want active CPUs add simple if statement >0 for usage 
*/ 

private int[] getCpuUsageStatistic() { 

String tempString = executeTop(); 

tempString = tempString.replaceAll(",", ""); 
tempString = tempString.replaceAll("User", ""); 
tempString = tempString.replaceAll("System", ""); 
tempString = tempString.replaceAll("IOW", ""); 
tempString = tempString.replaceAll("IRQ", ""); 
tempString = tempString.replaceAll("%", ""); 
for (int i = 0; i < 10; i++) { 
    tempString = tempString.replaceAll(" ", " "); 
} 
tempString = tempString.trim(); 
String[] myString = tempString.split(" "); 
int[] cpuUsageAsInt = new int[myString.length]; 
for (int i = 0; i < myString.length; i++) { 
    myString[i] = myString[i].trim(); 
    cpuUsageAsInt[i] = Integer.parseInt(myString[i]); 
} 
return cpuUsageAsInt; 
} 

private String executeTop() { 
java.lang.Process p = null; 
BufferedReader in = null; 
String returnString = null; 
try { 
    p = Runtime.getRuntime().exec("top -n 1"); 
    in = new BufferedReader(new InputStreamReader(p.getInputStream())); 
    while (returnString == null || returnString.contentEquals("")) { 
     returnString = in.readLine(); 
    } 
} catch (IOException e) { 
    Log.e("executeTop", "error in getting first line of top"); 
    e.printStackTrace(); 
} finally { 
    try { 
     in.close(); 
     p.destroy(); 
    } catch (IOException e) { 
     Log.e("executeTop", 
       "error in closing and destroying top process"); 
     e.printStackTrace(); 
    } 
} 
return returnString; 
} 
+0

有趣的我会测试这个以后,当我回到我的电脑 – user1974977 2013-03-06 21:21:36