22

Windows のタスク マネージャーと同様に、Android での全体的な CPU 使用率を取得したいと考えています。Androidに同梱されているプログラムの出力は解析できますtopが、同じことをするAPI呼び出しがあればもっといいです。

ポインタはありますか?

4

3 に答える 3

27

注意: この回答は古く、セキュリティ メカニズムが強化されているため、新しいバージョンの Androidでは機能しません。

完全な CPU 使用率 (各プロセスではなく) については、次を使用できます。

    /**
 * 
 * @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;
}

それを楽しんでください:)

于 2012-04-22T16:14:20.187 に答える
2

「DevTools」プロジェクトを参照できます。

ActivityManagerを使用すると、ActivityManager.RunningAppProcessInfo、ActivityManager.RunningTaskInfo、...などの多くの情報を取得できます。

しかし、結果が「top」コマンドと同じになるかどうかはわかりません。

ActivityManagerを参照してください

于 2010-03-18T07:10:18.273 に答える