|
1 | | -# Cockroach |
| 1 | +## Cockroach |
2 | 2 |
|
3 | 3 | > 打不死的小强,永不crash的Android |
4 | 4 |
|
5 | 5 |
|
6 | | -# 使用方式 |
| 6 | +### 使用方式 |
7 | 7 |
|
8 | | -自定义Application继承自android的Application,并在Application中初始化,越早初始化越好,可以在Aplication的onCreate中初始化 |
| 8 | +自定义Application继承自android的Application,并在Application中装载,越早初始化越好,可以在Aplication的onCreate中初始化,当然也可以根据需要在任意地方(不一定要在主线程)装载,在任意地方卸载。可以多次装载和卸载。 |
9 | 9 |
|
10 | | -# 初始化方式 |
| 10 | +例如: |
11 | 11 |
|
12 | 12 | ```java |
13 | 13 |
|
@@ -56,8 +56,94 @@ public class App extends Application { |
56 | 56 | ``` |
57 | 57 | 卸载 Cockroach |
58 | 58 |
|
59 | | -` Cockroach.uninstall();` |
| 59 | +```java |
| 60 | + |
| 61 | + Cockroach.uninstall(); |
| 62 | + |
| 63 | +``` |
| 64 | + |
| 65 | + |
| 66 | +### 测试 |
| 67 | +装载Cockroach后点击view抛出异常和new Handler中抛出异常 |
| 68 | + |
| 69 | +```java |
| 70 | + |
| 71 | + |
| 72 | + findViewById(R.id.but1).setOnClickListener(new View.OnClickListener() { |
| 73 | + @Override |
| 74 | + public void onClick(View v) { |
| 75 | + throw new RuntimeException("click exception..."); |
| 76 | + } |
| 77 | + }); |
| 78 | + |
| 79 | + findViewById(R.id.but2).setOnClickListener(new View.OnClickListener() { |
| 80 | + @Override |
| 81 | + public void onClick(View v) { |
| 82 | + new Handler().post(new Runnable() { |
| 83 | + @Override |
| 84 | + public void run() { |
| 85 | + throw new RuntimeException("handler exception..."); |
| 86 | + } |
| 87 | + }); |
| 88 | + } |
| 89 | + }); |
| 90 | + |
| 91 | + findViewById(R.id.but3).setOnClickListener(new View.OnClickListener() { |
| 92 | + @Override |
| 93 | + public void onClick(View v) { |
| 94 | + new Thread() { |
| 95 | + @Override |
| 96 | + public void run() { |
| 97 | + super.run(); |
| 98 | + throw new RuntimeException("new thread exception..."); |
| 99 | + } |
| 100 | + }.start(); |
| 101 | + } |
| 102 | + }); |
| 103 | + |
| 104 | + |
| 105 | +``` |
| 106 | + |
| 107 | +捕获到的堆栈如下,可以看到都已经被 `at com.wanjian.cockroach.Cockroach$1.run(Cockroach.java:47)` 拦截,APP没有任何影响,没有闪退,也没有重启进程 |
| 108 | + |
| 109 | +```java |
| 110 | + |
| 111 | +02-15 11:25:16.940 29873-29873/wj.com.fuck W/System.err: java.lang.RuntimeException: click exception... |
| 112 | +02-15 11:25:16.940 29873-29873/wj.com.fuck W/System.err: at wj.com.fuck.MainActivity$3.onClick(MainActivity.java:53) |
| 113 | +02-15 11:25:16.940 29873-29873/wj.com.fuck W/System.err: at android.view.View.performClick(View.java:4909) |
| 114 | +02-15 11:25:16.940 29873-29873/wj.com.fuck W/System.err: at android.view.View$PerformClick.run(View.java:20390) |
| 115 | +02-15 11:25:16.940 29873-29873/wj.com.fuck W/System.err: at android.os.Handler.handleCallback(Handler.java:815) |
| 116 | +02-15 11:25:16.940 29873-29873/wj.com.fuck W/System.err: at android.os.Handler.dispatchMessage(Handler.java:104) |
| 117 | +02-15 11:25:16.940 29873-29873/wj.com.fuck W/System.err: at android.os.Looper.loop(Looper.java:194) |
| 118 | +02-15 11:25:16.940 29873-29873/wj.com.fuck W/System.err: at com.wanjian.cockroach.Cockroach$1.run(Cockroach.java:47) |
| 119 | +02-15 11:25:16.941 29873-29873/wj.com.fuck W/System.err: at android.os.Handler.handleCallback(Handler.java:815) |
| 120 | +02-15 11:25:16.941 29873-29873/wj.com.fuck W/System.err: at android.os.Handler.dispatchMessage(Handler.java:104) |
| 121 | +02-15 11:25:16.941 29873-29873/wj.com.fuck W/System.err: at android.os.Looper.loop(Looper.java:194) |
| 122 | +02-15 11:25:16.941 29873-29873/wj.com.fuck W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5826) |
| 123 | +02-15 11:25:16.941 29873-29873/wj.com.fuck W/System.err: at java.lang.reflect.Method.invoke(Native Method) |
| 124 | +02-15 11:25:16.941 29873-29873/wj.com.fuck W/System.err: at java.lang.reflect.Method.invoke(Method.java:372) |
| 125 | +02-15 11:25:16.941 29873-29873/wj.com.fuck W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1009) |
| 126 | +02-15 11:25:16.941 29873-29873/wj.com.fuck W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:804) |
| 127 | +02-15 11:25:22.340 29873-29873/wj.com.fuck W/System.err: java.lang.RuntimeException: handler exception... |
| 128 | +02-15 11:25:22.341 29873-29873/wj.com.fuck W/System.err: at wj.com.fuck.MainActivity$4$1.run(MainActivity.java:63) |
| 129 | +02-15 11:25:22.341 29873-29873/wj.com.fuck W/System.err: at android.os.Handler.handleCallback(Handler.java:815) |
| 130 | +02-15 11:25:22.341 29873-29873/wj.com.fuck W/System.err: at android.os.Handler.dispatchMessage(Handler.java:104) |
| 131 | +02-15 11:25:22.341 29873-29873/wj.com.fuck W/System.err: at android.os.Looper.loop(Looper.java:194) |
| 132 | +02-15 11:25:22.341 29873-29873/wj.com.fuck W/System.err: at com.wanjian.cockroach.Cockroach$1.run(Cockroach.java:47) |
| 133 | +02-15 11:25:22.341 29873-29873/wj.com.fuck W/System.err: at android.os.Handler.handleCallback(Handler.java:815) |
| 134 | +02-15 11:25:22.341 29873-29873/wj.com.fuck W/System.err: at android.os.Handler.dispatchMessage(Handler.java:104) |
| 135 | +02-15 11:25:22.341 29873-29873/wj.com.fuck W/System.err: at android.os.Looper.loop(Looper.java:194) |
| 136 | +02-15 11:25:22.341 29873-29873/wj.com.fuck W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5826) |
| 137 | +02-15 11:25:22.341 29873-29873/wj.com.fuck W/System.err: at java.lang.reflect.Method.invoke(Native Method) |
| 138 | +02-15 11:25:22.341 29873-29873/wj.com.fuck W/System.err: at java.lang.reflect.Method.invoke(Method.java:372) |
| 139 | +02-15 11:25:22.341 29873-29873/wj.com.fuck W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1009) |
| 140 | +02-15 11:25:22.341 29873-29873/wj.com.fuck W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:804) |
| 141 | +02-15 11:25:24.457 29873-29873/wj.com.fuck W/System.err: java.lang.RuntimeException: new thread exception... |
| 142 | +02-15 11:25:24.457 29873-29873/wj.com.fuck W/System.err: at wj.com.fuck.MainActivity$5$1.run(MainActivity.java:76) |
| 143 | + |
| 144 | +``` |
60 | 145 |
|
| 146 | +### 注意 |
61 | 147 |
|
62 | 148 | * 当主线程或子线程抛出异常时都会调用exceptionHandler.handlerException(Thread thread, Throwable throwable) |
63 | 149 |
|
|
0 commit comments