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