1
1
package com .aiyang .crashx .init ;
2
2
3
3
import android .content .Context ;
4
+ import android .os .Handler ;
4
5
import android .os .Looper ;
5
- import android .util .Log ;
6
- import android .widget .Toast ;
7
6
7
+ import com .aiyang .crashx .R ;
8
8
import com .aiyang .crashx .inter .ICrash ;
9
+ import com .aiyang .crashx .util .LogUtils ;
10
+ import com .aiyang .crashx .util .ToastUtil ;
9
11
12
+ /**
13
+ * @author aiyang
14
+ */
10
15
public class RealCrash implements Thread .UncaughtExceptionHandler , ICrash {
11
16
12
-
13
17
private Context mContext ;
14
18
15
19
private Thread .UncaughtExceptionHandler mDefaultCaughtExceptionHandler ;
16
20
21
+ private KeepLoop keepLoop ;
17
22
18
- public void setUncaughtCrash (Context mContext ) {
23
+ public RealCrash (Context mContext ) {
19
24
this .mContext = mContext ;
25
+ keepLoop = KeepLoop .getInstance ();
26
+ }
20
27
28
+ /**
29
+ * 拦截系统异常捕获器
30
+ */
31
+ @ Override
32
+ public void setUncaughtCrash () {
21
33
//获取默认的系统异常捕获器
22
34
if (mDefaultCaughtExceptionHandler == null ){
23
35
mDefaultCaughtExceptionHandler = Thread .getDefaultUncaughtExceptionHandler ();
@@ -30,40 +42,30 @@ public void setUncaughtCrash(Context mContext) {
30
42
31
43
@ Override
32
44
public void uncaughtException (Thread thread , Throwable throwable ) {
33
- Log .d ("aaa" , thread .getName ()+ "线程" );
45
+ LogUtils .d ("出现异常:" + thread .toString () );
34
46
if (!handleException (throwable ) && mDefaultCaughtExceptionHandler != null ) {
35
47
//如果无法拦截处理,则让系统默认的异常处理器来处理
36
48
mDefaultCaughtExceptionHandler .uncaughtException (thread , throwable );
37
49
38
- //重启应用
39
- Log .d ("aaa" ,"handleException: 异常未拦截,待重启" );
50
+ //建议重启应用
51
+ ToastUtil .show (mContext ,mContext .getString (R .string .carsh_noway ));
52
+ }else {
53
+ keepLoop .keepLoop (mContext ,thread );
40
54
}
41
-
42
55
}
43
56
44
57
/**
45
- * 自定义错误处理
46
- * @return true:处理了该异常 ; 否则返回false
58
+ * 错误处理检测
59
+ * @return true:可以拦截该异常 ; 否则返回false
47
60
*/
48
61
@ Override
49
62
public boolean handleException (Throwable ex ) {
50
63
if (ex == null ) {
51
64
return false ;
52
65
}
53
- final String msg = ex .getLocalizedMessage ();
54
- if (msg == null ) {
55
- return false ;
56
- }
57
- Log .d ("aaa" ,"handleException: 异常被拦截,待处理" );
58
- // //使用Toast来显示异常信息
59
- // new Thread() {
60
- // @Override
61
- // public void run() {
62
- // Looper.prepare();
63
- // Toast.makeText(mContext, "异常被拦截,待处理", Toast.LENGTH_LONG).show();
64
- // Looper.loop();
65
- // }
66
- // }.start();
66
+ String msg = ex .toString ();
67
+
68
+ LogUtils .d ("异常允许被拦截:" +msg );
67
69
return true ;
68
70
}
69
71
0 commit comments