Android自定义全局异常捕获

众所周知,Android程序在运行时遇到未处理的错误,会弹出类似程序异常退出之类的dialog,然后自动关闭。
那么这里介绍捕获全局未知异常和修改那个弹出的dialog的方法。

  • 首先,如很多网上的博客所言在程序的Application子类中添加如下代码
//当程序发生Uncaught异常时捕获
Thread.setDefaultUncaughtExceptionHandler (new Thread.UncaughtExceptionHandler(){   
    @Override   
public void uncaughtException (Thread thread, Throwable e)   {      
    //做你要做的处理,比如把e.getMessage()保存到文件,发送一个email等等,不是本篇重点,不再赘述  
}});

这里Thread.UncaughtExceptionHandler()可以另写一个类来继承它,重构代码的事这里就不赘述了。

  • 今天主要要讲怎么修改让用户得知程序已经崩溃了的方法。

    网上很多方法是说在uncaughtException方法中Toast一条信息或者弹一个Dialog,这里本人亲测(4.0以上的系统),都是行不通的
    那么现在只能剑走偏锋,另寻他方。

自定义一个Activity来代替Dialog的功能

  • 定义一个类继承Activity,AndroidManifest.xml文件中声明此Activity,并且在此Activity标签中声明theme为继承@android:style/Theme.Dialog的style
  • uncaughtException方法中
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
System.exit(1);//关闭已奔溃的app进程

特别注意

  • Intent.FLAG_ACTIVITY_NEW_TASK这条flag一定要加,不然无法启动CrashActivity

  • System.exit(1);一定要,不然也无法启动CrashActivity

你可能感兴趣的:(Android自定义全局异常捕获)