读取 cpu百分比 进程占用cpu百分比的JAVA实现方式

来源:互联网 发布:supreme淘宝正品店铺 编辑:程序博客网 时间:2024/04/29 21:08

话不多说直接上代码:讲述两种CPU

TotalCpuTime

<span style="font-size:14px;">private static long getTotalCpuTime() { // 获取系统总CPU使用时间String[] cpuInfos = null;try {BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("/proc/stat")), 1000);String load = reader.readLine();reader.close();cpuInfos = load.split(" ");// System.out.println("cpulist:"+Arrays.toString(cpuInfos));} catch (IOException ex) {ex.printStackTrace();}long totalCpu = Long.parseLong(cpuInfos[2])+ Long.parseLong(cpuInfos[3]) + Long.parseLong(cpuInfos[4])+ Long.parseLong(cpuInfos[6]) + Long.parseLong(cpuInfos[5])+ Long.parseLong(cpuInfos[7]) + Long.parseLong(cpuInfos[8]);return totalCpu;}</span>
注:这种方法只获得总的CPU耗时信息

AppCpuTime

private static long getAppCpuTime(int pid) { // 获取应用占用的CPU时间String[] cpuInfos = null;try {// int pid = android.os.Process.myPid();BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("/proc/" + pid + "/stat")), 1000);String load = reader.readLine();reader.close();cpuInfos = load.split(" ");} catch (IOException ex) {ex.printStackTrace();}long appCpuTime = Long.parseLong(cpuInfos[13])+ Long.parseLong(cpuInfos[14]) + Long.parseLong(cpuInfos[15])+ Long.parseLong(cpuInfos[16]);return appCpuTime;}
接下来重点来啦:
public static float getProcessCpuRate(int pid) // 获得应用cpu占用率{float CPU = 0;try {float totalCpuTime1 = getTotalCpuTime();float processCpuTime1 = getAppCpuTime(pid);try {Thread.sleep(300);} catch (Exception e) {}float totalCpuTime2 = getTotalCpuTime();float processCpuTime2 = getAppCpuTime(pid);float cpuRate = 100 * (processCpuTime2 - processCpuTime1)/ (totalCpuTime2 - totalCpuTime1);String str = new DecimalFormat("0.00").format(cpuRate);CPU = Float.parseFloat(str);} catch (Exception e) {}return CPU;}

以上读取方式都是采用bufferReader读取指定路径中的信息。这中方式简单易操作。   接下来给大家讲解另一种方式,读取CPU相关信息:在我项目中...........MyUtil类里。同样采用的是bufferReader。返回的是一个ArrayList集合,存放了多核的耗时总时间时间eg:cpu  cpu1 cpu2 cpu 3...........等。


0 0