如何获得Android中的平均CPU使用率?

时间:2014-04-24 06:23:35

标签: android performance cpu cpu-usage

我想获得Android每100毫秒或500毫秒的平均CPU使用率。我曾尝试使用topdumpsys cpuinfo,但它们都没有告诉我平均使用情况或时间戳。那么如何获得平均使用量呢?
我注意到/proc/stat中有一些CPU使用情况信息,我可以使用/proc/stat计算平均CPU使用率吗?

2 个答案:

答案 0 :(得分:2)

以前在SO上回答:

private float readUsage() {
    try {
        RandomAccessFile reader = new RandomAccessFile("/proc/stat", "r");
        String load = reader.readLine();

        String[] toks = load.split(" ");

        long idle1 = Long.parseLong(toks[5]);
        long cpu1 = Long.parseLong(toks[2]) + Long.parseLong(toks[3]) + Long.parseLong(toks[4])
              + Long.parseLong(toks[6]) + Long.parseLong(toks[7]) + Long.parseLong(toks[8]);

        try {
            Thread.sleep(360);
        } catch (Exception e) {}

        reader.seek(0);
        load = reader.readLine();
        reader.close();

        toks = load.split(" ");

        long idle2 = Long.parseLong(toks[5]);
        long cpu2 = Long.parseLong(toks[2]) + Long.parseLong(toks[3]) + Long.parseLong(toks[4])
            + Long.parseLong(toks[6]) + Long.parseLong(toks[7]) + Long.parseLong(toks[8]);

        return (float)(cpu2 - cpu1) / ((cpu2 + idle2) - (cpu1 + idle1));

    } catch (IOException ex) {
        ex.printStackTrace();
    }

    return 0;
}

您可以查看更多信息Get Memory Usage in Android

答案 1 :(得分:0)

我已经测试了Krypton的解决方案,并得出了错误的数字(大约22%,而通过adb shell top获得了大约48%)。 因此,答案可能无法在android 7上正常运行,或者存在一些错误。

我在this question找到了一个可行的解决方案,而Souch提供的code已经为我们完成了工作。只需使用他的CpuInfo类即可在每次需要时获取平均负载。