Quando StrictMode di Android rileva una violazione di un oggetto trapelato (ad esempio attività), sarebbe utile se riuscissi a catturare un dump dell'heap in quel momento. Non c'è un modo ovvio, tuttavia, per configurarlo per farlo. Qualcuno sa di qualche trucco che può essere utilizzato per ottenerlo, ad es. un modo per convincere il sistema a eseguire un particolare codice prima che la pena di morte venga invocata? Non credo StrictMode genera un'eccezione, quindi non posso usare il trucco descritto qui: Is there a way to have an Android process produce a heap dump on an OutOfMemoryError?StrictMode Android e discariche di heap
5
A
risposta
7
Nessuna eccezione, ma StrictMode
lo fa stampare un messaggio a System.err
appena prima che termina. Quindi, questo è un hack, ma funziona, e come è solo andare a essere abilitato su build di debug Immagino che va bene ... :)
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));
e la classe di cui :
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();
}
}
}
}
(dove app
è un campo statico nella classe esterna contenente un riferimento al contesto applicativo, per comodità di riferimento)
la stringa le corrispondenze sono sopravvissute invariate dal rilascio del pan di zenzero fino a Jelly Bean, ma potrebbe teoricamente cambiare nelle versioni future, quindi vale la pena controllare le nuove versioni per assicurarsi che continuino a utilizzare lo stesso messaggio.
Problemi correlati
- 1. Strumento per analizzare grandi discariche di heap Java
- 2. Android WebView causa una violazione StrictMode
- 3. Android StrictMode Throwable: metodo di terminazione esplicita 'end' non chiamato
- 4. Aumento memoria Heap Android
- 5. Rilevare transazioni SQLite dimenticate su Android utilizzando StrictMode?
- 6. Individuazione della norma StrictMode violata
- 7. Gerarchia delle categorie di Wikipedia dalle discariche
- 8. Dimensioni di heap di comprensione Android
- 9. Android grow heap frag case
- 10. Dimensione minima heap manifesta Android
- 11. malloc() e memoria heap
- 12. AppDomains e GC Heap
- 13. java spazio di heap
- 14. off-heap, heap nativo, memoria diretta e memoria nativa
- 15. Qual è la relazione tra "un" heap e "l'" heap?
- 16. Oggetti nello heap e riferimenti
- 17. Stack e heap nel linguaggio di programmazione
- 18. Assemblaggio di Windows heap e stack?
- 19. StrictMode si lamenta che InputStream non viene chiuso
- 20. intento della telecamera e coda di priorità in Android
- 21. Applicazioni del mondo reale di heap binari e heap di Fibonacci
- 22. Come rilevare l'utilizzo della dimensione heap di un'applicazione Android
- 23. Come abilitare gli aggiornamenti di heap sul mio client Android
- 24. Algoritmo di Heap
- 25. L'iteratore di lista causa allocazioni di heap?
- 26. maresciallo discariche più veloce, più veloce cPickle carichi
- 27. Snow Leopard mette le discariche essenziali in un posto speciale?
- 28. Postgres pg_dump discariche database in un ordine diverso ogni volta
- 29. Hibernate, SessionFactoryObjectFactory e OutOfMemoryError: java heap space
- 30. Java JDBC clearBatch() e memoria heap