Почему мой обработчик исключений по умолчанию для службы не использует мои служебные исключения?

Я пытаюсь поймать все необработанные исключения, которые происходят в службе, которая выполняется в отдельном процессе. В onCreate для службы я вызываю метод, который вызывает Thread.setDefaultUncaughtExceptionHandler с классом MyCustomExceptionHandler. Мое рассмотрение журналов указывает, что оно установлено, но не всегда вызываются для исключенных исключений. Например, когда я жестко кодирую деление на ноль в службу, он вообще не вызывает вызов. Другим примером является исключение NullPointerException, которое я принудительно вызвал вызовом моего обработчика, но трассировка стека не указывала на фактические строки кода, вызвавшие исключение.

public class ********************* 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 ответ

Согласно javadoc:

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

Насколько я знаю, в вашем случае весь процесс умирает, то почему uncaughtException не вызывает. Он будет вызываться, если вы будете иметь исключенные исключения из отдельных потоков.

licensed under cc by-sa 3.0 with attribution.