Android StrictMode y volcado de montón

Cuando StrictMode de Android detecta una violación de objeto (por ejemplo, actividad) filtrada, sería útil que pudiera capturar un volcado de montón en ese momento. Sin embargo, no hay forma obvia de configurarlo para hacerlo. ¿Alguien sabe de algún truco que se puede utilizar para lograrlo, por ejemplo, una manera de convencer al sistema para ejecutar un código particular justo antes de la pena de muerte que se invoca? No creo que StrictMode lanza una excepción, por lo que no puedo utilizar el truco descrito aquí: ¿Existe alguna manera de que un proceso de Android produzca un volcado de montón en un OutOfMemoryError?

No excepción, pero StrictMode imprime un mensaje a System.err justo antes de que finaliza. Por lo tanto, se trata de un hack, pero funciona, y como sólo va a estar habilitado en las compilaciones de depuración creo que está bien … 🙂

En 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)); 

Y la clase referida a:

 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(); } } } } 

(Donde app es un campo estático en la clase externa que contiene una referencia al contexto de la aplicación, para facilitar la consulta)

La cadena que coincide ha sobrevivido sin cambios desde la liberación de jengibre hasta el jelly bean, pero podría teóricamente cambiar en futuras versiones, por lo que vale la pena comprobar las nuevas versiones para asegurarse de que todavía utilizan el mismo mensaje.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.