Android_程序未处理异常的捕获与处理

1.简介

对于程序抛出的未被捕获的异常,可能会导致程序异常退出,界面不友好且应记录关键错误信息上传至服务器。这里主要使用UncaughtExceptionHandler

2.代码实现

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
public class CrashHandler implements UncaughtExceptionHandler {
     public static final String TAG = CopyOfCrashHandler. class .getSimpleName();
 
     // 系统默认的UncaughtException处理类
     private Thread.UncaughtExceptionHandler mDefaultHandler;
     private static CopyOfCrashHandler instance;
     private Context mContext;
 
     private CopyOfCrashHandler() {
     }
 
     /** 获取CrashHandler实例 ,单例模式 */
     public static CopyOfCrashHandler getInstance() {
         if (instance == null )
             instance = new CopyOfCrashHandler();
         return instance;
     }
 
     /**
      * 初始化
      */
     public void init(Context context) {
         mContext = context;
         //记录下默认的UncaughtExceptionHandler
         mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
         //
         Thread.setDefaultUncaughtExceptionHandler( this );
     }
 
     /**
      * 当UncaughtException发生时会转入该函数来处理
      */
     @Override
     public void uncaughtException(Thread thread, Throwable ex) {
         if (!handleException(thread, ex) && mDefaultHandler != null ) {
             // 如果用户没有处理则让系统默认的异常处理器来处理
             mDefaultHandler.uncaughtException(thread, ex);
         } else {
             try {
                 Thread.sleep( 1000 );
             } catch (InterruptedException e) {
                 e.printStackTrace();
             }
             android.os.Process.killProcess(android.os.Process.myPid());
             System.exit( 1 );
         }
     }
 
     /**
      * 自定义错误处理,收集错误信息 发送错误报告等操作均在此完成.
      *
      * @param ex
      * @return true:如果处理了该异常信息;否则返回false.
      */
     private boolean handleException(Thread thread, Throwable ex) {
         if (ex == null ) {
             return false ;
         }
 
         StringBuffer sb = new StringBuffer();
         sb.append(thread + ", Cause By:" + ex).append( "\r\n\r\n" );
 
         StackTraceElement[] elements = ex.getStackTrace();
         for ( int i = 0 ; i < elements.length; i++) {
             sb.append(elements[i].toString() + "\r\n" );
         }
         //记录下关键错误信息,可以存至本地并上传至服务器
         //LogUtil.bug(TAG, sb.toString());
         
         //打开新Activity友好界面提示
         //Util.showDialog(mContext, "时间:"+Util.formatSimpleDateAndTime(new Date()), "程序出现异常,请记录时间并提示开发人员!");
         return true ;
     }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值