一、为什么要Crash

crash可以理解成堕落,垮台。按照我们通俗理解就是android App 因为不可预知的因素导致奔溃。

即使我们的程序发布前,经历了很多的测试,但是经过无数用户各种使用情况之后,可能会发生意想不到的crash.

为了及时反馈bug,通常我们都需要一个crash机制,以让开发人员尽快了解到问题所在,在下个版本中及时改进。

二、如何做到Crash

java的Thread中有一个UncaughtExceptionHandler接口,该接口的作用主要是为了  当 Thread 因未捕获的异常而突然终止时,调用处理程序。

接口下面有setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)

方法,方法主要作用为设置当线程由于未捕获到异常而突然终止,并且没有为该线程定义其他处理程序时所调用的默认处理程序。

通用demo如下

 1 public class DefaultExceptionHandler implements UncaughtExceptionHandler {  
 2   
 3    
 4   
 5     private Context act = null;  
 6   
 7    
 8   
 9     public DefaultExceptionHandler(Context act) {  
10   
11        this.act = act;  
12   
13     }  
14   
15    
16   
17     @Override  
18   
19     public void uncaughtException(Thread thread, Throwable ex) {  
20   
21    
22   
23        // 收集异常信息 并且发送到服务器  
24   
25        sendCrashReport(ex);  
26   
27    
28   
29        // 等待半秒  
30   
31        try {  
32   
33            Thread.sleep(500);  
34   
35        } catch (InterruptedException e) {  
36   
37            //  
38   
39        }  
40   
41          
42   
43        // 处理异常  
44   
45        handleException();  
46   
47    
48   
49     }  
50   
51    
52   
53     private void sendCrashReport(Throwable ex) {  
54   
55    
56   
57        StringBuffer exceptionStr = new StringBuffer();  
58   
59        exceptionStr.append(ex.getMessage());  
60   
61    
62   
63        StackTraceElement[] elements = ex.getStackTrace();  
64   
65        for (int i = 0; i < elements.length; i++) {  
66   
67            exceptionStr.append(elements[i].toString());  
68   
69        }  
70   
71    
72   
73        //TODO   
74   
75        //发送收集到的Crash信息到服务器  
76   
77     }  
78   
79    
80   
81     private void handleException() {  
82   
83        //TODO   
84   
85        //这里可以对异常进行处理。  
86   
87        //比如提示用户程序崩溃了。  
88   
89        //比如记录重要的信息,尝试恢复现场。  
90   
91        //或者干脆记录重要的信息后,直接杀死程序。  
92   
93     }  
94   
95    
96   
97 }  
View Code

相关文章:

  • 2021-04-01
  • 2021-06-13
  • 2021-05-02
  • 2022-12-23
  • 2022-12-23
  • 2021-09-16
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-08-25
  • 2022-12-23
  • 2022-01-08
  • 2022-12-23
  • 2022-02-26
  • 2021-06-11
相关资源
相似解决方案