Знание того, как перечислять потоки, будет бесполезно, если вы не сможете автоматически определять , когда происходит исключение.
Мы делаем это постоянно.В основном мы используем:
Thread.setDefaultUncaughtExceptionHandler
, когда наше приложение запускается, а затем мы сбрасываем необходимую информацию при возникновении исключения:
Map<Thread, StackTraceElement[]> mst = Thread.getAllStackTraces();
Runtime.getRuntime().freeMemory()
/ maxMemory()
/ totalMemory()
для получения основной информации о памяти
шаблон использования пользователем, если это приложение, с которым пользователь может взаимодействовать
домашняя "аналитика"
и т. Д.
Затем можно позвонить многодругих вещей и фантазии.Например, мы автоматически отправляем отчеты о сбоях (включая полную трассировку стека) на сервер, ожидающий таких трассировок.