有没有一种方法让Android进程在OutOfMemoryError上生成堆转储?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (24)

Sun -XX:+HeapDumpOnOutOfMemoryErrorJava 虚拟机支持一个选项,以便在Java进程堆满时转储堆。

Android上有没有类似的选项可以使OutOfMemoryException上的android应用程序转储堆?手动使用DDMS时,尝试正确计时可能很困难。

提问于
用户回答回答于

我使用下面的代码在我自己的Android应用程序中成功跟踪了他的建议:

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());
    }
}
用户回答回答于

我不知道这是否可行,但你可以尝试添加一个顶级异常处理程序,并在那里要求堆转储,如果它是OutOfMemoryError

扫码关注云+社区