Java 具有多个线程的Thread.UncaughtExceptionHandler

Java 具有多个线程的Thread.UncaughtExceptionHandler,java,android,multithreading,exception-handling,Java,Android,Multithreading,Exception Handling,我们的Android应用程序使用多个线程 通常的UI线程 运行多个线程以连接到套接字的通信层(粘性服务) 还有一些,加载图像、视频 目前,我们在应用程序中只定义了一个UncaughtExceptionHandler: public class OurApplication extends MultiDexApplication { public void onCreate (){ super.onCreate(); Thread.setDefaul

我们的Android应用程序使用多个线程

  • 通常的UI线程
  • 运行多个线程以连接到套接字的通信层(粘性服务)
  • 还有一些,加载图像、视频
目前,我们在
应用程序中只定义了一个
UncaughtExceptionHandler

public class OurApplication extends MultiDexApplication {

    public void onCreate (){
        super.onCreate();

        Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
            @Override
            public void uncaughtException(Thread thread, Throwable e) {
                //...
            }
        });
    }
}
通过对这一问题的研究,我们发现了这一点,我们开始思考每一条线索:

基本上,您必须实现自己的UncaughtExceptionHandler实例,然后必须确保您的应用程序运行的每个线程都调用setUncaughtExceptionHandler

由于我们仍然存在一些异常(基本上来自sticky服务),这些异常不是由
UncaughtExceptionHandler
处理的,因此我们认为处理程序没有为某些线程正确设置

因为默认处理程序是一个静态变量
java.lang.Thread
,所以这似乎是不可能的,在
应用程序中只有一个处理程序就足够了

例如,如果服务在将处理程序定义到应用程序之前启动,是否会导致这种情况

编辑:

我们的服务不在单独的进程上运行:

<service
    android:name=".servicios.ServiceBoot"
    android:action="com.aplicaty.soapbox.MyService"
    android:enabled="true"
    android:exported="true" >
</service>


欢迎提供任何提示或想法。

猜测一下:这可能是因为您的服务在一个单独的进程中运行。您可以通过调用Thread来检查该进程是否有处理程序。进程内的getDefaultUncaughtExceptionHandler可能是将处理程序传递给进程时出现了问题。