您当前的位置:首页 > 电脑百科 > 程序开发 > 移动端 > Android

Android中的线程捕获

时间:2019-07-31 17:11:38  来源:  作者:

前言

最近上的一个版本中,突然bugly的JAVA异常一个都没有了,正好升级了bugly的版本,还以为接入有问题,排查一些正常,特自信的说版本代码优秀…0 bug~~~

可是后面细想几百万的DAU,一个Java异常都没有都没有,这太不正常了。

目前项目中捕获全局异常的有:bugly、umeng、自己。

排查

bugly的捕获异常代码实现

文件路径:com.tencent.bugly.crashreport.crash.a

Android中的线程捕获

 

设置全局异常捕获

保存之前的UncaughtExceptionHandler ,将自己设置为默认异常处理器Thread.setDefaultUncaughtExceptionHandler(this)

Android中的线程捕获

 

异常捕获

Android中的线程捕获

 

异常分发

对捕获异常做分发

umeng的捕获异常代码实现

文件路径:com.umeng.analytics.pro.l

Android中的线程捕获

 

umeng的UncaughtExceptionHandler

实现逻辑和bugly类似

自己的捕获异常代码实现

Android中的线程捕获

 

自己的UncaughtExceptionHandler

问题定位:handleException笔误写错了!处理,导致之前默认异常处理未被调用,而且自己异常捕获写在最后,覆盖了之前的异常捕获

建议

为了避免此种问题再次发生,对异常捕获可以参考以下代码进行扩展

public class CrashHandler implements Thread.UncaughtExceptionHandler {
 private final Thread.UncaughtExceptionHandler mDefaultHandler;
 public CrashHandler() {
 //缓存之前的默认异常捕获
 mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
 Thread.setDefaultUncaughtExceptionHandler(this);
 }
 @Override
 public void uncaughtException(Thread t, Throwable e) {
 //分发异常
 if (mDefaultHandler != null) {
 mDefaultHandler.uncaughtException(t, e);
 }
 //TODO 自己处理
 Log.w("CrashHandler", e);
 }
}

当然最简单的方式是将自己的UncaughtExceptionHandler写在bugly和umeng的前面,让bugly和umeng分发异常给自己,但是你也不能保证你前面就没有其他的异常捕获监听,所以还是建议用上述方法。

扩展

  • Java中并不是所有的异常都会提示try-catch进行捕获的,比如RuntimeException
  • 线程是独立执行的代码片断,线程的问题应该由线程自己来解决,而不要委托到外部。

setUncaughtExceptionHandler

  • 对象方法
  • 用于指定Thread的异常捕获
  • 如未指定会去取ThreadPool中的异常捕获
  • 只能捕获executorService.execute执行的异常
  • 不能捕获executorService.submit(runnable),上述异常通过catch (ExecutionException e)进行捕获

setDefaultUncaughtExceptionHandler

  • 类方法
  • 用于捕获所有Thread中的异常捕获
  • 如Thread指定了异常捕获,则不调用默认的

最后

最后我准备了一些面试的知识汇总,数据结构,计算机网络等等都有。自己整理和分类的,还请尊重知识产出。

分享给大家的资料包括高级架构技术进阶脑图Android开发面试专题资料,还有高级进阶架构资料包括但不限于【高级UI、性能优化、移动架构师、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter等全方面的Android进阶实践技术】希望能帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也是可以分享给身边好友一起学习的!

资料免费领取方式:私信回复“架构资料”即可获取

Android中的线程捕获

 



Tags:Android 线程捕获   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
前言最近上的一个版本中,突然bugly的Java异常一个都没有了,正好升级了bugly的版本,还以为接入有问题,排查一些正常,特自信的说版本代码优秀…0 bug~~~可是后面细想几百万的...【详细内容】
2019-07-31  Tags: Android 线程捕获  点击:(269)  评论:(0)  加入收藏
▌简易百科推荐
今天面试遇到同学说做过内存优化,于是我一般都会问那 Bitmap 的像素内存存在哪?大多数同学都回答在 java heap 里面,就比较尴尬,理论上你做内存优化,如果连图片这个内存大户内存...【详细内容】
2021-12-23  像程序那样思考    Tags:Android开发   点击:(8)  评论:(0)  加入收藏
Android logcat日志封装logcat痛点在Android开发中使用logcat非常频繁,logcat能帮我们定位问题,但是在日常使用中发现每次使用都需要传递tag,并且会遇到输出频率很高的log,在多...【详细内容】
2021-12-22  YuCoding    Tags:Android   点击:(8)  评论:(0)  加入收藏
对项目的基本介绍 1.整个框架主要是给MVVM框架使用的,自己写完interface接口后,通过自定义的注解就能自动生成接口方法 2.用Kotlin的Flow去代替Rxjava,因为我发现RxJava功能很...【详细内容】
2021-12-08  网易Leo    Tags:Android开发   点击:(17)  评论:(0)  加入收藏
前言在Android开发过程中,有些时候会根据需要引用别的项目到当前项目里面,而且以Module形式引用。所以本篇博文就来分享一下怎么以Module形式引用别的项目到当前项目中,方便开...【详细内容】
2021-12-07  网易Leo    Tags:Android开发   点击:(22)  评论:(0)  加入收藏
作者:fundroid这篇文章偏阅读一些,大家可以了解下 Android 的一些最新动向。每年9/10月份 Google 都会举行约为期2天的 Android Dev Summit,在活动上 Google 的技术专家们会分...【详细内容】
2021-11-30  像程序那样思考    Tags:Android开发   点击:(15)  评论:(0)  加入收藏
一、 准备工作1、安装JDK,下载地址(可能需要一个oracle账号,大家百度一下或者自行注册一个就行。尽可能选择8或者11,这两个是长期版本)Java SE | Oracle Technology Network | Or...【详细内容】
2021-11-23  永沧    Tags:Android   点击:(28)  评论:(0)  加入收藏
使用Maven Publish Plugin插件。(官方支持)一、在Library的build.gradle中配置plugins { id 'com.android.library' id 'kotlin-android' id 'k...【详细内容】
2021-11-05  羊城小阳    Tags:Android   点击:(37)  评论:(0)  加入收藏
谷歌离推出Play Store应用程序的新数据隐私部分又近了一步。应用程序开发人员现在可以通过谷歌在Play控制台的新 "数据安全表 "填写相关细节。该公司表示,所需信息将从2022年...【详细内容】
2021-10-20    中关村在线  Tags:安卓   点击:(58)  评论:(0)  加入收藏
架构究竟是什么?如何更好的理解架构?我们知道一个APP通常是由class组成,而这些class之间如何组合,相互之间又如何产生作用,就是影响这个APP的关键点。细分的话我们可以将其分为类...【详细内容】
2021-09-17  像程序那样思考    Tags:Android架构   点击:(52)  评论:(0)  加入收藏
概述当Android应用程序需要访问设备上的敏感资源时,应用程序开发人员会使用权限模型。虽然该模型使用起来非常简单,但开发人员在使用权限时容易出错,从而导致安全漏洞。本文中,...【详细内容】
2021-09-07  SecTr安全团队    Tags:Android开发   点击:(66)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条