我有一个全局异常处理程序例程,它在运行时异常中包含一些异常
喜欢这个
public class ExceptionHandler
{
public static void handle(){
throw new RuntimeException(e);
}
}
在ExceptionHandler
类中,我还有一个静态构造函数
static
{
Thread.UncaughtExceptionHandler h = new Thread.UncaughtExceptionHandler()
{
@Override
public void uncaughtException(Thread thread, Throwable throwable)
{
Throwable t;
t = throwable;
if (throwable.getCause() != null)
t = throwable.getCause();
Log.e(t.getClass().getName(), t.getMessage(), t);
}
};
Thread.currentThread().setUncaughtExceptionHandler(h);
Thread.setDefaultUncaughtExceptionHandler(h);
}
问题是,抛出RTE后它不会进入UncaughtExceptionHandler
。为什么呢?
顺便说一句,我不能把它放到main方法中,因为我的Android程序中没有main。
答案 0 :(得分:1)
您可以继承Application类并在ExceptionHandler
方法中初始化onCreate()
。
public class YourApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler());
}
}
并在那里实现您的异常处理程序
private class ExceptionHandler implements Thread.UncaughtExceptionHandler {
@Override
public void uncaughtException(Thread thread, Throwable throwable) {
processUncaughtException(thread, throwable);
}
}
您可能还想维护默认的异常处理程序,以便在设置之前执行此操作
defaultExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
答案 1 :(得分:0)
只有在ClassLoader加载类时才会执行static
初始化程序块。我不是Android的专家,但我认为你可以在主活动类中初始化异常处理程序。只需像使用此处一样使用静态初始化程序块,或使用Activity
等onCreate
生命周期方法。 Leonidos此处还提供了另一个可能最适合此类初始化的选项:扩展Application
class
并将代码放在那里。