Ich möchte feststellen, wie schnell das Gerät ist, auf dem meine Android-Anwendung läuft?
Gibt es eine API dafür auf Android? Oder muss ich das selbst vergleichen?
Wenn das Gerät eine langsame CPU hat, möchte ich einige zeitaufwendige Vorgänge wie Animationen deaktivieren oder die maximale Anzahl gleichzeitiger HTTP-Anfragen begrenzen.
Zan Lynx
Der beste Weg, dies meiner Meinung nach zu tun, besteht darin, die Zeit zu überwachen, die für diese Aktionen benötigt wird. Wenn es zu lange dauert, ist das System zu langsam und Sie können ausgefallene Funktionen deaktivieren, bis es schnell genug ist.
Es ist keine gute Idee, die CPU-Geschwindigkeit oder andere Spezifikationen zu lesen und zu versuchen, die Systemgeschwindigkeit zu beurteilen. Zukünftige Hardwareänderungen können diese Spezifikationen bedeutungslos machen.
Schauen Sie sich zum Beispiel den Pentium 4 vs. den Core 2 an. Welche ist die schnellere CPU, ein 2,4 GHz Pentium 4 oder der 1,8 GHz Core 2? Ist ein 2 GHz Opteron schneller als ein 1,4 GHz Itanium 2? Woher wollen Sie wissen, welche Art von ARM-CPU tatsächlich schneller ist?
Um Systemgeschwindigkeitsbewertungen für Windows Vista und 7 zu erhalten, führt Microsoft tatsächlich Benchmarks der Maschine durch. Dies ist die einzige halbwegs genaue Methode, um die Systemfähigkeiten zu bestimmen.
@ZanLynx: Ich versuche, das gleiche Problem zu lösen, aber meiner Erfahrung nach ist das CPU-Benchmarking auf Android aufgrund von Hintergrundprozessen sehr ungenau. Haben Sie einen Weg gefunden, das zu mildern?
– Simplex
16. Januar ’12 um 13:11
@JonnyBoy: Tu einfach das Beste, was du kannst. Wenn Sie sich spontan anpassen können, indem Sie wichtige Vorgänge zeitlich planen, ist das das Beste. Viele GUI-Animationen tun dies, indem Zwischenbilder übersprungen werden, wenn das System zu ausgelastet ist.
– Zan Lynx
16. Januar ’12 um 17:41
Versuchen Sie zu lesen /proc/cpuinfo die CPU-Informationen enthält:
String[] args = {"/system/bin/cat", "/proc/cpuinfo"};
ProcessBuilder pb = new ProcessBuilder(args);
Process process = pb.start();
InputStream in = process.getInputStream();
//read the stream
Das ist eine ziemlich schlechte Idee. Ich meine, es wird funktionieren. Aber was wird Ihre App tun, wenn sie auf einer zukünftigen CPU-Version ausgeführt wird, die bei einer langsameren Taktrate mehr funktioniert? Wenn die App dies auf Pentium 4s getan hätte, würde die App beim Erscheinen von Core2 dumm aussehen.
– Zan Lynx
2. Februar ’11 um 15:37
Entschuldigung, ich hätte meinen Kommentar mehr an Darbat richten sollen.
– Zan Lynx
2. Februar ’11 um 15:43
ahmed_khan_89
Basierend auf der @dogbane-Lösung und dieser Antwort ist dies meine Implementierung, um den BogoMIPS-Wert zu erhalten:
/**
* 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;
}
Ich musste die geteilte Regex im obigen Code ändern, um einen gültigen Messwert für bogoMIPS zu erhalten: String[] cpuInfoArray =cpuInfo.split(":|\n"); Beifall
– BillyRayCyrus
8. Juni ’15 um 18:25
chiranjib
Bitte beziehen Sie sich auf den folgenden Link, der die CPU-bezogenen Daten bereitstellt