关闭

Android使用UncaughtExceptionHandler捕获全局异常

738人阅读 评论(0) 收藏 举报
分类:
Android系统的“程序异常退出”,给应用的用户体验造成不良影响。为了捕获应用运行时异常并给出友好提示,便可继承UncaughtExceptionHandler类来处理。通过Thread.setDefaultUncaughtExceptionHandler()方法将异常处理类设置到线程上即可。

    1、异常处理类,代码如下:

  1. public class CrashHandler implements UncaughtExceptionHandler {  
  2.     public static final String TAG = "CrashHandler";  
  3.     private static CrashHandler INSTANCE = new CrashHandler();  
  4.     private Context mContext;  
  5.     private Thread.UncaughtExceptionHandler mDefaultHandler;  
  6.   
  7.     private CrashHandler() {  
  8.     }  
  9.   
  10.     public static CrashHandler getInstance() {  
  11.         return INSTANCE;  
  12.     }  
  13.   
  14.     public void init(Context ctx) {  
  15.         mContext = ctx;  
  16.         mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();  
  17.         Thread.setDefaultUncaughtExceptionHandler(this);  
  18.     }  
  19.   
  20.     @Override  
  21.     public void uncaughtException(Thread thread, Throwable ex) {  
  22.         // if (!handleException(ex) && mDefaultHandler != null) {  
  23.         // mDefaultHandler.uncaughtException(thread, ex);  
  24.         // } else {  
  25.         // android.os.Process.killProcess(android.os.Process.myPid());  
  26.         // System.exit(10);  
  27.         // }  
  28.         System.out.println("uncaughtException");  
  29.   
  30.         new Thread() {  
  31.             @Override  
  32.             public void run() {  
  33.                 Looper.prepare();  
  34.                 new AlertDialog.Builder(mContext).setTitle("提示").setCancelable(false)  
  35.                         .setMessage("程序崩溃了...").setNeutralButton("我知道了"new OnClickListener() {  
  36.                             @Override  
  37.                             public void onClick(DialogInterface dialog, int which) {  
  38.                                 System.exit(0);  
  39.                             }  
  40.                         })  
  41.                         .create().show();  
  42.                 Looper.loop();  
  43.             }  
  44.         }.start();  
  45.     }  
  46.   
  47.     /** 
  48.      * 自定义错误处理,收集错误信息 发送错误报告等操作均在此完成. 开发者可以根据自己的情况来自定义异常处理逻辑 
  49.      * 
  50.      * @param ex 
  51.      * @return true:如果处理了该异常信息;否则返回false 
  52.      */  
  53.     private boolean handleException(Throwable ex) {  
  54.         if (ex == null) {  
  55.             return true;  
  56.         }  
  57.         // new Handler(Looper.getMainLooper()).post(new Runnable() {  
  58.         // @Override  
  59.         // public void run() {  
  60.         // new AlertDialog.Builder(mContext).setTitle("提示")  
  61.         // .setMessage("程序崩溃了...").setNeutralButton("我知道了", null)  
  62.         // .create().show();  
  63.         // }  
  64.         // });  
  65.   
  66.         return true;  
  67.     }  
  68. }  

2、线程绑定异常处理类
  1. public class CrashHandlerActivity extends Activity {  
  2.     /** Called when the activity is first created. */  
  3.     @Override  
  4.     public void onCreate(Bundle savedInstanceState) {  
  5.         super.onCreate(savedInstanceState);  
  6.         setContentView(R.layout.main);  
  7.         CrashHandler crashHandler = CrashHandler.getInstance();    
  8.         crashHandler.init(this);  //传入参数必须为Activity,否则AlertDialog将不显示。  
  9.         // 创建错误  
  10.         throw new NullPointerException();  
  11.     }  
  12. }  

Demo下载地址:http://code.google.com/p/android-custom-view/downloads/list

转载地址: http://orgcent.com/android-uncaughtexceptionhandler-exception/ | 萝卜白菜的博客

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Android全局异常捕获机制

安卓异常整体解决方案,从异常捕获、到异常日志写入、到异常上报等。。
  • XiNanHeiShao
  • XiNanHeiShao
  • 2017-06-15 21:26
  • 1843

Android 全局异常捕获

今天就来说说作为程序猿的我们每天都会遇到的东西bug,出bug不可怕可怕的是没有出bug时的堆栈信息,那么对于bug的信息收集就显得尤为重要了,一般用第三方bugly或者友盟等等都能轻易收集,但是由于...
  • zly921112
  • zly921112
  • 2016-07-09 18:01
  • 6910

详解Android全局异常的捕获处理

这篇文章主要为大家介绍了Android全局异常的捕获处理,为什么要进行捕获处理,如何进行捕获处理,想要了解的朋友可以参考一下 在Android开发中在所难免的会出现程序crash,俗称崩溃。用户的随...
  • zhangli_
  • zhangli_
  • 2016-02-22 14:49
  • 1440

捕获页面中全局Javascript异常

捕获页面中全局Javascript异常
  • github_38823514
  • github_38823514
  • 2017-07-03 11:17
  • 1128

自定义全局异常捕获

1.实现HandlerExceptionResover 2.注解@ControllerAdvice
  • jinzhencs
  • jinzhencs
  • 2016-06-17 15:03
  • 2431

全局捕获异常

在我们的Android应用开发中 经常出现一些bug 这样在用户体验的过程中 就会产生不好的回应 所以项目中我们实现全局捕获异常 这样 当程序崩溃时 会将报错的信息保存上传到...
  • Mannver
  • Mannver
  • 2016-05-12 21:43
  • 1109

Android全局异常捕获

在Android开发中在所难免的会出现程序crash,俗称崩溃。用户的随意性访问出现测试时未知的Bug导致我们的程序crash,此时我们是无法直接获取的错误log的,也就无法修复Bug。这就会极大的影...
  • lx_yoyo
  • lx_yoyo
  • 2016-08-29 23:40
  • 438

Android全局异常捕获并弹窗提示

Android 难免有崩溃的时候,但是崩溃了该如何处理呢?虽然那天有位同仁说 “既然崩溃了,用户体验就差了,心里会想这是毛APP,下次也不想用了” ,所以检查BUG以防崩溃是必须的,但是也需要一个后备...
  • hx7013
  • hx7013
  • 2016-12-14 09:36
  • 1868

在Android中自定义捕获Application全局异常

现在安装 Android 系统的手机和设备千差万别,在模拟器上运行良好的程序安装到某款手机上说不定就出现崩溃的现象,开发者个人不可能购买所有设备逐个调试,所以在程序发布出去之后,如果出现了崩溃现象,开...
  • qq_23547831
  • qq_23547831
  • 2014-12-04 15:25
  • 2203

在C#代码中应用Log4Net在Winform、Web和WPF中捕获全局异常

毕竟人不是神,谁写的程序都会有bug,有了bug不可怕,可怕的是出错了,你却不知道错误在哪里。所以我们需要将应用程序中抛出的所有异常都记录起来,不然出了错,找问题就能要了你的命。下面我们主要讨论的是如...
  • ryb666666
  • ryb666666
  • 2014-07-26 19:26
  • 2232
    个人资料
    • 访问:702338次
    • 积分:8453
    • 等级:
    • 排名:第2730名
    • 原创:80篇
    • 转载:478篇
    • 译文:1篇
    • 评论:115条
    最新评论