2010-03-18 47 views
19

मैं एंड्रॉइड पर समग्र सीपीयू उपयोग प्राप्त करना चाहता हूं, विंडोज़ टास्क मैनेजर के समान ही। मैं एंड्रॉइड में शामिल top प्रोग्राम के आउटपुट को पार्स कर सकता हूं, लेकिन यदि कोई एपीआई कॉल है जो वही काम करता है, तो यह बेहतर होगा।एंड्रॉइड पर सीपीयू उपयोग आंकड़े कैसे प्राप्त करें?

कोई बात नहीं?

उत्तर

2

आप "DevTools" प्रोजेक्ट का संदर्भ दे सकते हैं।

ActivityManager का उपयोग करते हुए आप इस तरह के ActivityManager.RunningAppProcessInfo, ActivityManager.RunningTaskInfo, के रूप में बहुत सारी जानकारी प्राप्त कर सकते हैं ...

लेकिन मुझे यकीन है नहीं कर रहा हूँ परिणाम होगा ही 'शीर्ष' कमांड के रूप में।

ActivityManager

+7

कोई CPU उपयोग या समय की जानकारी पाया जा सकता है वहां (या मैंने इसे याद किया?), अन्य चीजों के बीच केवल स्मृति उपयोग। CPU उपयोग के लिए – yuku

+0

, आप CPUGauge.cpp का उल्लेख कर सकते हैं, मुझे लगता है कि इस तरह की जानकारी के लिए "सार्वजनिक एपीआई" नहीं है। या आपको अपने आप से "/ proc/stat" पार्स करना होगा। –

+0

संदर्भ के लिए, यहां CPUGauge https://android.googlesource.com/platform/frameworks/native/+/a6938ba/libs/surfaceflinger/CPUGauge.cpp का स्रोत है –

25

देख पूरा 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; 
} 

इसके साथ मज़े :)

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^