2013-06-09 3 views
1

Я пытаюсь написать небольшой код, который бы выгрузил загрузку процессора (% от процессора, используемого за последние 10 секунд и дампа, который каждые 10 секунд) моего приложения для Android.Использование утилиты android app

Теперь предполагается, что в телефоне есть 2 или 4 ядра. Как эффективно сбрасывать% cpu, используемое приложением. У меня есть googled некоторые образцы верхней команды, но я не уверен, как использовать цифры верхней команды для отображения использования процессора в многоядерном и за последние 10 секунд.

Я добавил следующий код: но я всегда получаю null в buf. exec, возвращает действительный результат с помощью команды ls, но не с top. Мне нужно, чтобы получить разрешение на MainFest выполнить верхнюю команду Do ...

String str = new String(); 
    str = "top -l1"; 
    Process p; 
    p = Runtime.getRuntime().exec(str); 
    BufferedReader bri = new BufferedReader(new InputStreamReader(p.getInputStream())); 
    String line; 
    /* Skip 6 lines */ 
    int count = 0; 
    char[] buf= new char[10240]; 
    bri.read(buf); 
    Log.e("TEST", new String(buf)); 

ответ

0

Я не очень хорошо знаком с top, но this question, кажется, предполагает, что есть способ для сбора данных от отдельных ядер.

В любом случае, я предлагаю вам использовать Dumpsys tool, что гораздо интереснее, поскольку оно может предоставить вам использование ЦП независимо от количества ядер. Например, команда:

adb shell dumpsys cpuinfo 

даст выход вида:

Load: 0.08/0.4/0.64 
CPU usage from 42816ms to 34683ms ago: 
system_server: 1% = 1% user + 0% kernel/faults: 16 minor 
kdebuglog.sh: 0% = 0% user + 0% kernel/faults: 160 minor 
tiwlan_wq: 0% = 0% user + 0% kernel 
usb_mass_storag: 0% = 0% user + 0% kernel 
pvr_workqueue: 0% = 0% user + 0% kernel 
+sleep: 0% = 0% user + 0% kernel 
+sleep: 0% = 0% user + 0% kernel 
TOTAL: 6% = 1% user + 3% kernel + 0% irq 

Проверьте этот SO ответ для получения более подробной информации о том, как использовать Dumpsys: What's the Android ADB shell "dumpsys" tool and what are its benefits?

+0

Мне нужно за каждый процесс и все за один раз. Я пишу этот диагностический инструмент, чтобы выкапывать, как мой процесс ведет себя со временем. – mSO

+0

Гарантированное разрешение android.permission.DUMP требуется, который не разрешен согласно требованиям проекта. Я работаю с – mSO

0

Для тех, которые достигли этот вопрос для решения этой проблемы, я отправляю свое решение о том, как получить значение использования процессора с помощью команды «сверху»

private String getCpuUsage() 
    { 
     ArrayList<String> list = new ArrayList<String>(); 
     String cpuUsageValue = ""; 

     Process p = null; 
     try { 

      p = Runtime.getRuntime().exec(new String[] { "sh", "-c", "top -n 1 | grep " + appProcessName }); //appProcessName is com.example.app 

     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); 

     int i =0; 
     String line = ""; 
     try { 

      line = reader.readLine(); 

     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 


     //while(line != null) 
     if(line != null) 
     { 

      //11203 0 0% S 13 901560K 43528K fg u0_a141 com.example.app 

      String lineOuput[] = line.split(" "); 
      cpuUsageValue = lineOuput[5].trim(); 
      //[19472, , 0, , , 0%, S, , , , 15, 904664K, , 44148K, , fg, u0_a141, , com.example.app] 

      Log.i(TAG, "cpu usage value : " + cpuUsageValue); 

      list.add(line); 
      try { 
       line = reader.readLine(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      i++; 
     } 
     else 
     { 
      Log.i(TAG, "command line is null"); 

     } 

     return cpuUsageValue; 


    } 
Смежные вопросы