У меня есть обработчик (поток), на котором я публикую Runnables. Если Runnable по ошибке выдает исключение RuntimeException, происходит сбой всего процесса приложения. По умолчанию это звучит разумно, но я хотел бы перехватывать такие исключения во время выполнения, регистрировать ошибку и продолжать работу. Однако у меня возникают трудности с выполнением этой работы. Я думал о следующих вариантах:
- Подкласс
Looper
и переопределениеloop()
, которое содержит код, вызывающий методrun()
опубликованных Runnables. Это не сработало, так какLooper
является окончательным. - Подкласс
HandlerThread
и переопределить метод запуска, который вызывает классLooper.loop()
. В случае исключения во время выполнения снова вызовитеsuper.run()
и так далее. Это не сработало, поскольку «в каждом потоке может быть создан только один Looper». - В каждый исполняемый класс включите try-catch для исключений времени выполнения. Это будет работать, но довольно раздражает, так как у меня довольно много разных классов Runnable. Кроме того, не защитит поток обработчика, если исполняемый файл по ошибке забудет включить try-catch.
В идеальном мире у Looper был бы метод-член с именем registerExceptionHandler(ExceptionHandler)
, а затем в случае исключения вызывался бы ExceptionHandler
.
У кого-нибудь есть лучшее предложение?