我正在尝试捕获服务中发生的所有未处理的异常 在一个单独的过程中运行。在onCreate服务中,我打电话 用于调用Thread.setDefaultUncaughtExceptionHandler的方法 MyCustomExceptionHandler类。我对日志的检查表明 它被设置但不会一直被调用未被捕获 例外。例如,当我硬编码除以零时 服务,它根本没有被调用。另一个例子是 我强迫的NullPointerException导致了对我的调用 处理程序,但堆栈跟踪没有指向实际的代码行 这导致了例外。
public class ActivityEngineService extends android.app.Service {
/** Called when the service is first created. */
@Override
public void onCreate() {
super.onCreate();
setUncaughtExceptionHandler();
// Get the service that has a hard coded divide by zero running
}
public void setUncaughtExceptionHandler() {
Thread.setDefaultUncaughtExceptionHandler(new CustomExceptionHandler());
System.out.println("Thread.getDefaultUncaughtExceptionHandler(): " + Thread.getDefaultUncaughtExceptionHandler());
}
public class CustomExceptionHandler implements UncaughtExceptionHandler {
private UncaughtExceptionHandler defaultUEH;
public CustomExceptionHandler() {
this.defaultUEH = Thread.getDefaultUncaughtExceptionHandler();
}
public void uncaughtException(Thread t, Throwable e) {
System.out.println("CustomExceptionHandler uncaughtException e: " + e.getMessage());
defaultUEH.uncaughtException(t, e);
}
}
}
答案 0 :(得分:0)
根据javadoc:
Sets the default uncaught exception handler. This handler is invoked in case any Thread dies due to an unhandled exception.
据我所知,在整个过程中,整个过程正在消亡,这就是为什么uncaughtException
不会调用的原因。如果你在单独的线程中有未捕获的异常,它将被调用。