Para ampliar la respuesta de CommonsWare:
tengo ni idea de si esto funciona, pero es posible que trate adding a top-level exception handler, y allí asking for a heap dump si es un OutOfMemoryError
.
Seguí su sugerencia con éxito en mi propia aplicación para Android con el siguiente código:
public class MyActivity extends Activity {
public static class MyUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler {
@Override
public void uncaughtException(Thread thread, Throwable ex) {
Log.e("UncaughtException", "Got an uncaught exception: "+ex.toString());
if(ex.getClass().equals(OutOfMemoryError.class))
{
try {
android.os.Debug.dumpHprofData("/sdcard/dump.hprof");
} catch (IOException e) {
e.printStackTrace();
}
}
ex.printStackTrace();
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Thread.currentThread().setUncaughtExceptionHandler(new MyUncaughtExceptionHandler());
}
}
Una vez creado el vertedero, es necesario copiarlo desde su teléfono a su PC: Haga clic en "Activar Almacenamiento USB "en el teléfono, encuentre el archivo y cópielo en su disco duro.
Entonces, si desea utilizar el Eclipse Memory Analyzer (MAT) para analizar el archivo, tendrá que convertir el archivo: hprof-conv.exe dump.hprof dump-conv.hprof
(hprof-conv está situado bajo android-sdk/tools
)
Por último, abra la dump-conv.hprof
archivo con MAT
Me he dado cuenta de que esto a menudo funciona, pero a veces no da como resultado un vuelco. No estoy seguro por qué. – emmby
También he hecho lo mismo y, a veces, el archivo de volcado está dañado (o al menos hprof-conv parece pensarlo). Solo agregaría una sugerencia para hacer un System.gc() antes de descargar. – snowdragon
Probablemente la aplicación se terminó antes de que se escribiera el archivo, o (lo que era peor) antes de que finalizara. –