ser - ¿Cómo detectar la velocidad de la CPU de Android?
overclock android root (4)
Me gustaría detectar qué tan rápido está el dispositivo en el que se ejecuta mi aplicación de Android?
¿Hay alguna API para hacerlo en Android? ¿O tengo que compararlo por mí mismo?
Si el dispositivo tiene una CPU lenta, me gustaría desactivar algunas operaciones que consumen mucho tiempo como animaciones o limitar el número máximo de solicitudes HTTP simultáneas.
Basado en la solución @dogbane y esta answer , esta es mi implementación para obtener el valor 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://.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;
}
La mejor manera de hacerlo, en mi opinión, es monitorear el tiempo que toma realizar estas acciones. Si toma demasiado tiempo, entonces el sistema es demasiado lento y puede desactivar las funciones de lujo hasta que sea lo suficientemente rápido.
Leer la velocidad de la CPU u otras especificaciones e intentar juzgar la velocidad del sistema es una mala idea. Los futuros cambios de hardware podrían hacer que estas especificaciones no tengan sentido.
Mira el Pentium 4 vs el Core 2, por ejemplo. ¿Cuál es la CPU más rápida, un Pentium 4 de 2.4 GHz o el Core 2 de 1.8 GHz? ¿Es un Opteron a 2 GHz más rápido que un Itanium 2 a 1.4 GHz? ¿Cómo vas a saber qué tipo de CPU ARM es realmente más rápida?
Para obtener las clasificaciones de velocidad del sistema para Windows Vista y 7, Microsoft en realidad compara la máquina. Este es el único método preciso a medias para determinar las capacidades del sistema.
Parece que un buen método es usar SystemClock.uptimeMillis().
Por favor, consulte el siguiente enlace que proporcionará los datos relacionados con la CPU
Intente leer /proc/cpuinfo
que contiene información de la CPU:
String[] args = {"/system/bin/cat", "/proc/cpuinfo"};
ProcessBuilder pb = new ProcessBuilder(args);
Process process = pb.start();
InputStream in = process.getInputStream();
//read the stream