热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android自定义全局异常捕获

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

众所周知,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


推荐阅读
author-avatar
窝窝笑丫
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有