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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容