2013-04-18 73 views
2

我一直在努力獲得準確的CPU使用率每個進程和進程空閒CPU時間.. 我試過「頂部」命令proc/[pid]/stat文件夾,但仍然試圖運氣..如何獲得準確的CPU使用率每個進程和進程空閒CPU時間

TOP命令提供CPU使用所有在fg(前景)和BG(背景) 運行的進程,但它不是那麼準確我覺得..因爲它顯示%CPU 0 ,即使這個過程在後臺運行..任何其他方式?請幫助

+0

Dumpsys cpuinfo在2.2和2.3.6上工作得非常好,但是當我在4.0上試用時,它給了我一個輸出錯誤消息,如「權限拒絕:無法從pid轉儲電池服務...」此外,當應用程序是推出有一個項目在日誌標記爲「PackageManager」,表明不授予權限android.permissionDUMP包....(protectionLevel = 3 ...)「 – aditya

+0

DUMP權限將無法使用Android 4.0或4.1後,您必須使用您的應用程序作爲root用戶或放入/system/app/yourapp.apk。 –

+0

@VISHAL /system/app/yourapp.apk。需要一個根植的ROM或一個根本不需要的設備。 – aditya

回答

2

我已經找到一種方法來做到這一點自己.. 我使用

  1. PROC/[PID]/STAT - >每個進程CPU佔用率14和15的參數
  2. PROC /統計 - >在同一時間的所有進程的CPU消耗
+0

回答更多解釋:http://stackoverflow.com/a/31274572/2872712 – apricot

1

你可以得到CPU使用率:

ArrayList<String> list = new ArrayList<String>(); 
    try { 
     // -m 10, how many entries you want, -d 1, delay by how much, -n 1, 
     // number of iterations 
     Process p = Runtime.getRuntime().exec("top -m 15 -d 1 -n 1"); 

     BufferedReader reader = new BufferedReader(new InputStreamReader(
       p.getInputStream())); 
     int i = 0; 
     String line = reader.readLine(); 
     while (line != null) { 
      Log.e("Output " i, line); 
      list.add(line); 
      line = reader.readLine(); 
      i ; 
     } 

     p.waitFor(); 

     Toast.makeText(getBaseContext(), "Got update",Toast.LENGTH_SHORT) 
       .show(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
     Toast.makeText(getBaseContext(), "Caught", Toast.LENGTH_SHORT) 
       .show(); 
    } 
+0

頂級命令總結結果。結果不是十進制值。 – aditya