Android RuntimeException正在静默发生而不是被记录

时间:2016-05-08 19:46:04

标签: java android multithreading

所以我有一些代码会抛出RuntimeException。我知道它抛出了一个RuntimeException,我在某些情况下写了这样做。最近,我遇到了我认为是僵局的问题,因为该方法似乎没有完成,但是当我注销问题时,我意识到它实际上是RuntimeException。

现在,问题出现了:此异常正在以静默方式发生。 Android Studio中的Android监视器不显示堆栈跟踪。这让我失望了,因为在普通的Java应用程序中(我比较习惯,我是专业的Java开发人员,但我对Android来说是新手),RuntimeExceptions直接向控制台发送堆栈跟踪

所以,我的反应是做一个Thread.UncaughtExceptionHandler来记录它。只是......它不起作用。

这是我的UncaughtExceptionHandler。我并没有真正关心它做它所做的所有事情,我只是试图让事情发生,以表明它正在被召唤。

public static class ContactsUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler{

        private static final String TAG = "UncaughtException";

        @Override
        public void uncaughtException(Thread thread, Throwable throwable) {
            System.out.println("UNCAUGHT EXCEPTION"); //TODO delete this
            Log.e(TAG, String.format("Uncaught exception in thread %d", thread.getId()), throwable);
            throwable.printStackTrace();
            System.exit(1);
        }
    }

此处理程序以下列方式添加:

1)我有一个执行者产生线程。它使用ThreadFactory,它使用Thread.setUncaughtExceptionHandler()将此处理程序分配给每个线程。

2)我在Application类的onCreate()方法中调用Thread.setDefaultUncaughtExceptionHandler()。

3)发生这种情况的代码是Runnable.run()方法。我在run()方法中放了一行调用Thread.currentThread()。setUncaughtExceptionHandler()。

没有任何作用。这些操作都没有被触发。

我完全知道发生了RuntimeException,因为如果我用try-catch块包围代码并以这种方式执行printStackTrace(),它会显示在控制台日志中。我无法让UncaughtExceptionHandler工作。

发生这种情况的代码非常漫长而详细,这里有一个快速摘要:

@Override
public void run(){
    Thread.currentThread().setUncaughtExceptionHandler(new ContactsThreadFactory.ContactsUncaughtExceptionHandler());
    System.out.println("This line outputs to the console");
    object.callingMethodThatCausesException();
    System.out.println("This line never executes, because exception was thrown");
}

有关如何解决此问题的任何想法?我不明白为什么它不起作用。

编辑:刚刚发现了一些有趣的东西,而不是100%确定它意味着什么。我把"抛出了新的RuntimeException()"进入我的Activity类的onCreate()方法,该异常在正常情况下显示在控制台中。我尝试从Runnable中做同样的事情,什么也没做。不完全确定如何做到这一点。

另外,UncaughtExceptionHandler适用于我输入的新RuntimeException。我只是不明白它为什么不在别的地方工作?

0 个答案:

没有答案