Wenn Android StrictMode eine Verletzung des ausgelaufenen Objekts (z. B. Aktivität) erkennt, wäre es hilfreich, wenn ich zu diesem Zeitpunkt einen Heap-Dump erfassen könnte. Es gibt jedoch keinen offensichtlichen Weg, dies zu konfigurieren. Kennt jemand einen Trick, der dazu verwendet werden kann, z. eine Möglichkeit, das System dazu zu bringen, kurz vor der Einleitung der Todesstrafe einen bestimmten Code auszuführen? Ich glaube nicht, StrictMode eine Ausnahme auslöst, so kann ich nicht den Trick hier beschrieben verwenden: Is there a way to have an Android process produce a heap dump on an OutOfMemoryError?Android StrictMode und Heap-Dumps
5
A
Antwort
7
keine Ausnahme, aber StrictMode
hat eine Nachricht an System.err
drucken, kurz bevor es endet. Also, das ist ein Hack, aber es funktioniert und wie es nur geht auf Debug aktiviert sein baut ich meine, es ist in Ordnung ... :)
in onCreate()
:
//monitor System.err for messages that indicate the process is about to be killed by
//StrictMode and cause a heap dump when one is caught
System.setErr (new HProfDumpingStderrPrintStream (System.err));
und die Klasse bezeichnet :
private static class HProfDumpingStderrPrintStream extends PrintStream
{
public HProfDumpingStderrPrintStream (OutputStream destination)
{
super (destination);
}
@Override
public synchronized void println (String str)
{
super.println (str);
if (str.equals ("StrictMode VmPolicy violation with POLICY_DEATH; shutting down."))
{
// StrictMode is about to terminate us... don't let it!
super.println ("Trapped StrictMode shutdown notice: logging heap data");
try {
android.os.Debug.dumpHprofData(app.getDir ("hprof", MODE_WORLD_READABLE) + "/strictmode-death-penalty.hprof");
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
(wo app
ist ein statisches Feld in der äußeren Klasse einen Verweis auf den Anwendungskontext, zur Vereinfachung der Bezugnahme enthält)
der String es hat sich vom Lebkuchen-Release bis zum Jelly Bean unverändert erhalten, aber es könnte sich theoretisch in zukünftigen Versionen ändern, so dass es sich lohnt, neue Releases zu überprüfen, um sicherzustellen, dass sie immer noch dieselbe Nachricht verwenden.
Verwandte Themen
- 1. Fehler StrictMode $ AndroidBlockGuardPolicy.onNetwork
- 2. Welchen Lebenszyklus hat der StrictMode von Android?
- 3. Wo StrictMode Code innerhalb einer Android App
- 4. Android StrictMode Throwable: Explizite Terminierungsmethode 'end' nicht aufgerufen
- 5. Kann nicht geschlossen werden für StrictMode
- 6. Kameraabsicht und Prioritätswarteschlange in Android
- 7. Warum nimmt StrictMode keine Lese-/Schreiboperationen von SQLite auf?
- 8. StrictMode Verwirrung - wie ist das der falsche Thread?
- 9. StrictMode Richtlinienverstoß: android.os.StrictMode $ StrictModeDiskReadViolation: policy = 327711 Verstoß = 2 bei Anwendung super.onCreate
- 10. Java HeapDumps zeigen an, dass die verwendete Heap-Größe nach OutOfMemory-Ausnahmen 30% kleiner als die tatsächliche Heap-Definition ist.
- 11. android: layout_marginStart und android: layout_marginEnd
- 12. Android und onSaveInstance und Restore
- 13. Unterschied zwischen Android: Breite und android: layout_width
- 14. Unterschied zwischen Android: windowBackground und Android: colorBackground?
- 15. Android: EditText - mehrere Zeilen und Android: inputType
- 16. Größenanpassung Android Android Widgets (DatePicker und TimePicker)
- 17. Unterschied zwischen Android: ID und Android: LabelFor?
- 18. Android: NoClassDefFoundError für Android 4.4 und unter
- 19. Android: Verzeichnis und Dateiauswahl Android-Bibliothek
- 20. Android-Annotationen und neue Android-Databinding
- 21. Unterschied zwischen Android: layout_alignParentTop und android: layout_alignParentStart
- 22. Android HttpClient und HTTPS
- 23. Android Liste und Checkbox
- 24. Android ArrayIndexOutOfBoundsException und AbsListViewRecycleBin.addScrapView
- 25. Objective-C und Android
- 26. Android Tiefpassfilter und Hochpassfilter
- 27. Android-Annotations und Vererbung
- 28. Android JSON und Nullwerte
- 29. moshi und Android 2.3.3
- 30. Android: sync und Karte