2011-02-02 2 views
24

Я хотел бы определить, насколько быстро работает устройство, на котором работает приложение для Android?Как определить скорость процессора Android?

Есть ли какой-нибудь API для Android? Или мне нужно сравнивать его самостоятельно?

Если устройство имеет медленный процессор, я хотел бы отключить некоторые трудоемкие операции, такие как анимация, или ограничить максимальное количество одновременных запросов HTTP.

ответ

24

Лучший способ сделать по моему мнению, это отслеживать время, необходимое для выполнения этих действий. Если это занимает слишком много времени, система слишком медленная, и вы можете отключить причудливые функции, пока она не станет достаточно быстрой.

Чтение скорости процессора или других характеристик и попытка оценить скорость системы - плохая идея. Будущие аппаратные изменения могут сделать эти спецификации бессмысленными.

Посмотрите на Pentium 4 и Core 2, например. Каков более быстрый процессор, 2,4 ГГц Pentium 4 или 1.8 ГГц Core 2? Является ли Opteron 2 ГГц быстрее, чем 1,4 ГГц Itanium 2? Как вы узнаете, какой ARM-процессор на самом деле быстрее?

Чтобы получить рейтинг скорости системы для Windows Vista и 7, Microsoft фактически сравнивает машину. Это единственный полуточный метод определения возможностей системы.

Это выглядит как хороший способ заключается в использовании SystemClock.uptimeMillis().

+0

Вы делаете очень хороший момент @ Zan. –

+0

Должен ли я просто рассчитывать время с помощью System.currentTimeMillis()? –

+0

@ darbat: http://developer.android.com/reference/android/os/SystemClock.html Попробуйте использовать uptimeMillis(). –

8

Попробуйте прочитать /proc/cpuinfo, который содержит информацию о CPU:

String[] args = {"/system/bin/cat", "/proc/cpuinfo"}; 
    ProcessBuilder pb = new ProcessBuilder(args); 

    Process process = pb.start(); 
    InputStream in = process.getInputStream(); 
    //read the stream 
+2

Это очень плохая идея. Я имею в виду, это сработает. Но что будет делать ваше приложение при запуске в будущей версии процессора, которая больше работает на более медленной тактовой частоте? Если приложение выполнило это на Pentium 4, то при выходе Core2 приложение выглядело бы глупо. –

+2

Извините, мне следовало бы адресовать мой комментарий больше к дарбату. –

0

на основе решения @dogbane и этот answer, это моя реализация, чтобы получить значение BogoMIPS:

/** 
* parse the CPU info to get the BogoMIPS. 
* 
* @return the BogoMIPS value as a String 
*/ 
public static String getBogoMipsFromCpuInfo(){ 
    String result = null; 
    String cpuInfo = readCPUinfo(); 
    String[] cpuInfoArray =cpuInfo.split(":"); 
    for(int i = 0 ; i< cpuInfoArray.length;i++){ 
     if(cpuInfoArray[i].contains("BogoMIPS")){ 
      result = cpuInfoArray[i+1]; 
      break; 
     } 
    } 
    if(result != null) result = result.trim(); 
    return result; 
} 

/** 
* @see {https://stackoverflow.com/a/3021088/3014036} 
* 
* @return the CPU info. 
*/ 
public static String readCPUinfo() 
{ 
    ProcessBuilder cmd; 
    String result=""; 
    InputStream in = null; 
    try{ 
     String[] args = {"/system/bin/cat", "/proc/cpuinfo"}; 
     cmd = new ProcessBuilder(args); 
     Process process = cmd.start(); 
     in = process.getInputStream(); 
     byte[] re = new byte[1024]; 
     while(in.read(re) != -1){ 
      System.out.println(new String(re)); 
      result = result + new String(re); 
     } 
    } catch(IOException ex){ 
     ex.printStackTrace(); 
    } finally { 
      try { 
       if(in !=null) 
       in.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
    } 
    return result; 
} 
+2

мне пришлось изменить раздвоение регулярное выражение в коде выше, чтобы получить действительное чтение для BogoMIPS: 'String [] cpuInfoArray = cpuInfo.split (": | \\ п");' Приветствия – BillyRayCyrus

+0

благодарит. Я проверю это снова. –

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