2010-03-18 21 views
19

Windows 'Görev Yöneticisi'nin yaptığı gibi, genel CPU kullanımını Android'de kullanmak istiyorum. Android'de bulunan top programının çıktısını ayrıştırabilirim, ancak aynı şeyi yapan bir API çağrısı varsa daha iyi olur.Android'de CPU kullanım istatistikleri nasıl edinilir?

İşaretçiler var mı?

cevap

2

"DevTools" projesine başvurabilirsiniz.

Böyle ActivityManager.RunningAppProcessInfo, ActivityManager.RunningTaskInfo gibi birçok bilgiyi alabilirsiniz ActivityManager kullanma

...

Ama emin değilim sonuç olacak aynı 'üst' komutu olarak.

kullanabilirsiniz (değil her işlem için) tam CPU kullanımı için ActivityManager

+7

CPU kullanımı veya zaman bilgisi bulunabilir yok Orada (ya da özledim mi?), sadece başka şeyler arasında bellek kullanımı. CPU kullanımı için – yuku

+0

, CPUGauge.cpp'ye başvurabilirsiniz, bence istediğiniz bu tür bilgi için "public API" bulunmuyor. Veya "/ proc/stat" i kendiniz ayrıştırmanız gerekiyor. –

+0

Başvuru için, burada CPUGauge kaynağı https://android.googlesource.com/platform/frameworks/native/+/a6938ba/libs/surfaceflinger/CPUGauge.cpp –

25

bkz:

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

onunla eğlenin :)