首页 > 代码库 > Android使用UncaughtExceptionHandler捕获全局异常

Android使用UncaughtExceptionHandler捕获全局异常

 

参考资料:

http://blog.csdn.net/hehe9737/article/details/7662123

http://www.apkbus.com/android-128270-1-1.html

 http://www.cnblogs.com/freeliver54/archive/2011/10/17/2215423.html


 

 

Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {// 给主线程设置一个处理运行时异常的handler

  public void uncaughtException(Thread thread, final Throwable ex) {

    ex.printStackTrace();

     //当程序出现crash时,就会进入这里,就可以在这里做一些操作,再把System.exit(0);

    //

  }

});

 

public static void setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)设置当线程由于未捕获到异常而突然终止,并且没有为该线程定义其他处理程序时所调用的默认处理程序。 

未捕获到的异常处理首先由线程控制,然后由线程的 ThreadGroup 对象控制,最后由未捕获到的默认异常处理程序控制。如果线程不设置明确的未捕获到的异常处理程序,并且该线程的线程组(包括父线程组)未特别指定其 uncaughtException 方法,则将调用默认处理程序的 uncaughtException 方法。 

通过设置未捕获到的默认异常处理程序,应用程序可以为那些已经接受系统提供的任何“默认”行为的线程改变未捕获到的异常处理方式(如记录到某一特定设备或文件)。 

请注意,未捕获到的默认异常处理程序通常不应顺从该线程的 ThreadGroup 对象,因为这可能导致无限递归。 


参数:
eh - 用作未捕获到的默认异常处理程序的对象。 如果为 null,则没有默认处理程序。 

 

static void setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)

      //为一个线程设置一个默认的Handler,在程序不能捕获而退出,并且么有其他的handler时被调用

       所以只要通过set方法,为一个线程设置一个handler就可以在程序异常退出时,捕获改异常,

http://www.eoeandroid.com/thread-167271-1-1.html

 

 

在JDK5.0中,我们通过Thread的实例方法setUncaughtExceptionHandler,可以为任何一个Thread设置一个UncaughtExceptionHandler。

当然你也可以为所有Thread设置一个默认的UncaughtExceptionHandler,通过调用Thread.setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)方法,这是Thread的一个static方法。 

 

Android使用UncaughtExceptionHandler捕获全局异常