对于友盟统计我想搞程序的应该无人不晓,其中对于里面用得最多的功能就是对线上的崩溃进行修复,而这些异常都是运行期的,如:
![](https://img-blog.csdnimg.cn/img_convert/3a5a2b02fcc8ff23c02c7e08b30a199c.png)
![](https://img-blog.csdnimg.cn/img_convert/bc930d6412d28a96ac9ba140a033189f.png)
其实也就是可以对线程中出现了这种运行期异常是提供有一种捕获机制对其进行统一处理,所以这里来剖析一下其原理,先制造一个异常:
![](https://img-blog.csdnimg.cn/img_convert/d05d1d11e3f18776e86c77ccd6eb01e7.png)
编译运行:
![](https://img-blog.csdnimg.cn/img_convert/8ca3844c5121be5a3574d5278efce74c.gif)
如果是在app中出现这种异常那直接整个app就挂掉了,正确的姿势应该是对其这样的异常进行捕获,然后可以做一些人性化的处理,对于友盟而言就会将其错误异常上传到自己服务器上了,如何做?
![](https://img-blog.csdnimg.cn/img_convert/16cfe03f597da69cfc34042796543ad8.png)
然后再次运行:
![](https://img-blog.csdnimg.cn/img_convert/5b2eced74be2bf3bcba72a0685eef947.gif)
这样就木有抛出红色的异常而是被咱们自己给捕获到了,另外对于其异常的详细堆栈信息是可以打印出来了,下面做个实验来输出一下,先建几个类分别进行调用,如下:
![](https://img-blog.csdnimg.cn/img_convert/14f8e10eb38e18e50d82da2411de18a3.png)
![](https://img-blog.csdnimg.cn/img_convert/437952c9fdfadd0a59ff1dfee4a9f79f.png)
然后在main中调用一下:
![](https://img-blog.csdnimg.cn/img_convert/18f2e725d9b775c92f9cafb43adfab8a.png)
此时运行一下:
![](https://img-blog.csdnimg.cn/img_convert/f714ea7679c8412bb2dd27d1aa628bf4.png)
![](https://img-blog.csdnimg.cn/img_convert/7d7d460179424024fb1231c100eb8e0a.png)
![](https://img-blog.csdnimg.cn/img_convert/b7056194b3a5e0f74506dc6270f2731e.png)
可见其详细堆栈信息都可以打印出来,只是目前我们打印的顺序跟系统的是相反的,系统的是先打印调用处,如下:
![](https://img-blog.csdnimg.cn/img_convert/5eb9bfedd449387127cf0ab5332f7801.png)
比较简单,但是挺有用。