为什么我的服务默认异常处理程序没有捕获我的服务异常?

时间:2014-04-04 16:20:58

标签: java android

我正在尝试捕获服务中发生的所有未处理的异常 在一个单独的过程中运行。在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);
        }
    }  
}

1 个答案:

答案 0 :(得分:0)

根据javadoc

Sets the default uncaught exception handler. This handler is invoked in case any Thread dies due to an unhandled exception.

据我所知,在整个过程中,整个过程正在消亡,这就是为什么uncaughtException不会调用的原因。如果你在单独的线程中有未捕获的异常,它将被调用。