Java 具有多个线程的Thread.UncaughtExceptionHandler
我们的Android应用程序使用多个线程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
- 通常的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可能是将处理程序传递给进程时出现了问题。