Как получить статистику использования процессора на Android? - PullRequest
21 голосов
/ 18 марта 2010

Я хочу получить общее использование процессора на Android, аналогичное тому, что делает диспетчер задач Windows. Я могу разобрать вывод программы top, включенной в Android, но если есть вызов API, который делает то же самое, было бы лучше.

Есть указатели?

Ответы [ 3 ]

25 голосов
/ 22 апреля 2012

ВНИМАНИЕ : Этот ответ устарел и НЕ работает на более новых версиях Android благодаря улучшенным механизмам безопасности.

Для полного использования процессора (не для каждого процесса) вы можете использовать:

    /**
 * 
 * @return integer Array with 4 elements: user, system, idle and other cpu
 *         usage in percentage.
 */
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;
}

Веселитесь вместе с ним:)

2 голосов
/ 18 марта 2010

Вы можете сослаться на проект "DevTools".

Используя ActivityManager, вы можете получить много информации, например ActivityManager.RunningAppProcessInfo, ActivityManager.RunningTaskInfo, ...

Но я не уверен, что результат будет таким же, как команда 'top'.

см ActivityManager

0 голосов
/ 15 марта 2019

Вы можете прочитать /proc/stat и проанализировать содержимое файла. Первая строка выглядит так:
cpu 79242 0 74306 842486413 756859 6140 67701 0
Значения столбцов следующие слева направо:

 - 1st column : user = normal processes executing in user mode
 - 2nd column : nice = niced processes executing in user mode
 - 3rd column : system = processes executing in kernel mode
 - 4th column : idle = twiddling thumbs
 - 5th column : iowait = waiting for I/O to complete
 - 6th column : irq = servicing interrupts
 - 7th column : softirq = servicing softirqs


Средний процент простоя:
X % = ( idle * 100 ) / ( user + nice + system + idle + iowait + irq + softirq )
Вы можете вычислить разницу между простоями времени и разницей в загрузке процессора.

...