zu fangen Ich habe einen Block von Code, der in Android NDK riesige Mengen von Arbeitsspeicher zuweist. Last was ich brauche, ist die Verwendung von try - catch block für die Möglichkeit, es könnte NoMemoryError sein. Weißt du, wie man es im nativen SDK schreibt?Android NDK - Versuch, mit NoMemoryError
ich brauche gleiche Funktionalität wie dies umzusetzen:
for(int i=1;i<50;i++){
try{
int[] mega =new int[i*1024*1024];//1MB
}catch (OutOfMemoryError e) {
usedMemory= (Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory())/new Float(1048576.0);
usedText=usedMemory+" MB";
tw.setText(usedText);
break;
}
}
Ihr Kommentar sagt 1MB, aber es wird tatsächlich 4MB jeder Iteration zuweisen. Das Problem mit diesem Code ist, dass Android abstürzt und brennt, bevor Sie eine Ausnahme bekommen. Das System wird versuchen, andere Apps und Dienste herunterzufahren, um den Speicher freizugeben, und dabei wird Android sehr langsam und beginnt sich schlecht zu benehmen. Anstatt das System so zu belasten, warum fragen Sie nicht einfach die Menge an freiem Speicher ab? – BitBank
Ich brauche es nur zum Üben von NDK ... und ich denke, es gibt keine Möglichkeit, diese Funktion in NDK zu reproduzieren, was denkst du? Übrigens ist es nicht wichtig, ob es 1 MB oder 4 MB ist, ich überprüfe freien Speicher von der Laufzeit – Waypoint