我有一个全局异常处理程序例程,它封装了运行时异常中的一些异常。
像这样
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。为什么?
顺便说一句,我不能把它放到主要的方法中,因为我的Android程序中没有main。
发布于 2013-01-10 09:59:05
您可以子类应用程序类,并在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();发布于 2013-01-10 09:59:37
只有当类被static加载时,才会执行ClassLoader初始化程序块。我不是Android方面的专家,但我认为您可以在主活动类中初始化异常处理程序。只需像这里一样使用静态初始化程序块,或者使用Activity生命周期方法(如onCreate )。Leonidos在这里建议的另一个选项可能是这种初始化的最佳选择:扩展Application class并将代码放在那里。
https://stackoverflow.com/questions/14254933
复制相似问题