Как определить скорость процессора Android?
Я хотел бы узнать, насколько быстро работает устройство, на котором работает мое приложение Android?
Есть ли какой-нибудь API для Android? Или мне нужно сравнивать его самостоятельно?
Если устройство имеет медленный процессор, я бы хотел отключить некоторые трудоемкие операции, такие как анимация, или ограничить максимальное количество одновременных запросов HTTP.
Ответы
Ответ 1
Лучший способ сделать это, на мой взгляд, - следить за временем, которое требуется для выполнения этих действий. Если это занимает слишком много времени, система слишком медленная, и вы можете отключить причудливые функции, пока она не станет достаточно быстрой.
Чтение скорости процессора или других спецификаций и попытка оценить скорость системы - плохая идея. Будущие аппаратные изменения могут сделать эти спецификации бессмысленными.
Посмотрите, например, на 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().
Ответ 2
Попробуйте прочитать /proc/cpuinfo
, который содержит информацию о процессоре:
String[] args = {"/system/bin/cat", "/proc/cpuinfo"};
ProcessBuilder pb = new ProcessBuilder(args);
Process process = pb.start();
InputStream in = process.getInputStream();
//read the stream
Ответ 3
Пожалуйста, обратитесь к следующей ссылке, которая предоставит данные, связанные с процессором.
Ответ 4
На основе решения @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 {/info/214709/how-to-read-cpu-frequency-on-android-device/1151022#1151022}
*
* @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;
}