Чтобы расширить ответ CommonsWare:
Я понятия не имею, работает ли это, но вы можете попробовать добавить обработчик исключений верхнего уровня , и там запрашивая дамп кучи , если это OutOfMemoryError
.
Я успешно последовал его предложению в своем приложении для 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());
}
}
Последамп создан, вам нужно скопировать его с телефона на компьютер: нажмите «Включить USB-накопитель» на телефоне, найдите файл и скопируйте его на жесткий диск.
Затем, если хотите,чтобы использовать Eclipse Memory Analyzer (MAT) для анализа файла, вам нужно будет преобразовать файл: hprof-conv.exe dump.hprof dump-conv.hprof
(hprof-conv находится в android-sdk/tools
)
Наконец, откройте файл dump-conv.hprof
с MAT