【发布时间】:2014-03-18 05:49:57
【问题描述】:
我有一个处理程序(线程),我在上面发布了 Runnables。如果一个 Runnable 错误地抛出了 RuntimeException,整个应用程序进程就会崩溃。作为默认设置,这听起来很合理,但我想捕获此类运行时异常,记录错误并继续运行。不过,我很难做到这一点。我想到了以下选项:
- 子类
Looper并覆盖loop(),其中包含调用已发布Runnables 的run()方法的代码。这不起作用,因为Looper是最终的。 - 子类
HandlerThread并覆盖调用Looper.loop()的run 方法。如果出现运行时异常,请再次调用super.run(),依此类推。这不起作用,因为“每个线程只能创建一个 Looper”。 - 在每个可运行类中,包含一个用于运行时异常的 try-catch。这会起作用,但很烦人,因为我有很多不同的 Runnable 类。此外,如果可运行对象错误地忘记包含 try-catch,则不会保护处理程序线程。
在理想情况下,Looper 将有一个名为 registerExceptionHandler(ExceptionHandler) 的成员方法,然后在出现异常时调用 ExceptionHandler。
有人有更好的建议吗?
【问题讨论】:
-
把runnable的代码放到try-catch块中,捕获异常。所以 runnable 不会抛出捕获的异常。您可以根据需要管理 catch 块中的异常。
-
对,我认为这就是我所说的选项 3,我认为这是一种解决方法。问题是我有几个 Runnable 类,并且希望避免将这样的代码添加到每个类中。