Android获取应用cpu使用率

来源:互联网 发布:vb语言入门到精通 编辑:程序博客网 时间:2024/05/20 05:57
public static float getProcessCpuRate()    {                float totalCpuTime1 = getTotalCpuTime();        float processCpuTime1 = getAppCpuTime();        try        {            Thread.sleep(360);                    }        catch (Exception e)        {        }                float totalCpuTime2 = getTotalCpuTime();        float processCpuTime2 = getAppCpuTime();                float cpuRate = 100 * (processCpuTime2 - processCpuTime1)                / (totalCpuTime2 - totalCpuTime1);                return cpuRate;    }        public 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(" ");        }        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;    }        public static long getAppCpuTime()    { // 获取应用占用的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;    }

计算某个时间段内AppCpuTime与TotalCpuTime的变化,然后按照比例换算成该应用的Cpu使用率。

Android系统本省也有一个类是用来显示Cpu使用率的:

android/system/frameworks/base/packages/SystemUI/src/com/android/systemui/LoadAverageService.java
阅读源码发现也是读取/proc目录下的文件来计算Cpu使用率 

另外一种方式Runtime.getRuntime().exec("top -d 1 -n 1"),但是每次都获取到的cpu使用率为0,找不到原因

http://www.m2catalyst.com/tutorial-finding-cpu-usage-for-individual-android-apps/
0 0
原创粉丝点击