2010-03-18 20 views
19

Quiero obtener el uso general de la CPU en Android, similar al que hace el Administrador de tareas de Windows. Puedo analizar el resultado del programa top incluido en Android, pero si hay una llamada API que hace lo mismo, sería mejor.¿Cómo obtener estadísticas de uso de CPU en Android?

¿Alguna sugerencia?

Respuesta

2

Puede hacer referencia al proyecto "DevTools".

Usando ActivityManager se puede obtener información lotes, tales como ActivityManager.RunningAppProcessInfo, ActivityManager.RunningTaskInfo, ...

Pero no estoy seguro de que el resultado será igual al comando 'top'.

ver ActivityManager

+7

No uso de la CPU o información de tiempo se pueden encontrar allí (¿o lo extraño?), solo uso de memoria entre otras cosas. – yuku

+0

para el uso de CPU, puede consultar CPUGauge.cpp, creo que no hay "API pública" para este tipo de información que desea. O tiene que analizar "/ proc/stat" usted mismo. –

+0

Como referencia, aquí está la fuente de CPUGauge https://android.googlesource.com/platform/frameworks/native/+/a6938ba/libs/surfaceflinger/CPUGauge.cpp –

25

Para un uso completo de la CPU (no para cada proceso) que puede utilizar:

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

divertirse con él :)

Cuestiones relacionadas