Site icon ashishb.net

Android uncaught exception handler and ANR

While trying to install a custom exception handler to catch uncaught exceptions (crashes), I ended up writing

CustomExceptionHandler handler = new CustomExceptionHandler(Thread.currentThread().getUncaughtExceptionHandler());
Thread.setDefaultUncaughtExceptionHandler(handler);

instead of

Thread.UncaughtExceptionHandler existingHandler = Thread.getDefaultUncaughtExceptionHandler();
CustomExceptionHandler handler = new CustomExceptionHandler(existingHandler);
Thread.setDefaultUncaughtExceptionHandler(handler);

The difference looks minor but it broke the exception handler and converted every crash into a cryptic ANR!

0 libc.so syscall 
1 libart.so art::ConditionVariable::WaitHoldingLocks(art::Thread*) 
2 libart.so art::ThreadList::WaitForOtherNonDaemonThreadsToExit(bool) 
3 libart.so art::JII::DestroyJavaVM(_JavaVM*) 
4 libandroid_runtime.so android::AndroidRuntime::start(char const*, android::Vector const&, bool) 
5 app_process64 main 
6 libc.so __libc_init

 

Very occasionally, I got a more useful error that didn’t look related but it was.

java.lang.StackOverflowError:
      at net.ashishb.androidmusicplayer.util.CustomExceptionHandler.uncaughtException (CustomExceptionHandler.java:20)
      at java.lang.ThreadGroup.uncaughtException (ThreadGroup.java:1068)
      at java.lang.ThreadGroup.uncaughtException (ThreadGroup.java:1063)
      at net.ashishb.androidmusicplayer.util.CustomExceptionHandler.uncaughtException (CustomExceptionHandler.java:22)
      at org.chromium.base.JavaExceptionReporter.uncaughtException (chromium-Monochrome.aab-stable-484407323:6)
      at java.lang.ThreadGroup.uncaughtException (ThreadGroup.java:1068)
      at java.lang.ThreadGroup.uncaughtException (ThreadGroup.java:1063)
      at net.ashishb.androidmusicplayer.util.CustomExceptionHandler.uncaughtException (CustomExceptionHandler.java:22)
      at org.chromium.base.JavaExceptionReporter.uncaughtException (chromium-Monochrome.aab-stable-484407323:6)
      at java.lang.ThreadGroup.uncaughtException (ThreadGroup.java:1068)
      at java.lang.ThreadGroup.uncaughtException (ThreadGroup.java:1063)
      at net.ashishb.androidmusicplayer.util.CustomExceptionHandler.uncaughtException (CustomExceptionHandler.java:22)
      at org.chromium.base.JavaExceptionReporter.uncaughtException (chromium-Monochrome.aab-stable-484407323:6)

 

Exit mobile version