一文了解 Android 的崩溃

在 Android 中,应用崩溃可以分为四种,分别是:Java崩溃native崩溃ANROOM

  • Java崩溃:就是在Java代码中,出现了未捕获异常,导致程序异常退出
  • Native崩溃:发生在 native 层面的崩溃,一般都是因为在Native代码中访问非法地址,也可能是地址对齐出现了问题,或者发生了程序主动abort,这些都会产生相应的signal信号,导致程序异常退出。
  • ANR:应用无响应。当事件输入是5s、广播10s,前台服务20s,后台服务200s无响应时,弹出应用无响应的dialog。
  • oom: 是指内存溢出导致的应用崩溃

Java崩溃

Java 层面的崩溃,常见的主要有空指针异常(NullPointerException)、数组越界异常(ArrayIndexOutOfBoundsException)、类型转换异常(ClassCastException)、算术异常(ArithmeticException)等

在线下环境我们在开发应用时,出现了java层面的崩溃,可以通过logcat的堆栈信息debug 的方式来找出原因。但是到了线上环境,上面方法就不可用了。

这时我们可以实现 Thread.UncaughtExceptionHandler 接口,通过Thread.setDefaultUncaughtExceptionHandler 来将异常信息上传到服务器。或者使用 Firebase CrashlyticsBugly 等平台来获取崩溃信息。

native 崩溃

对于 native的崩溃 ,我们需要使用 Google 的 Breakpad库,它的功能主要是采集 native 的crash日志。关于Breakpad的使用,可以看 Google Breakpad Android 使用详解。当前我们也可以直接使用 Bugly啄木鸟 等平台来处理native的崩溃

ANR

应用发生ANR时,会将ANR的信息写入/data/anr/下生成对应的ANR异常信息的文件。

在线下环境,我们可以使用Android studio的文件查看工具直接查看或者使用adb pull /data/anr/traces.txt [目标路径]命令导出。高版本的os上如果权限不足,则可以通过chmod来修改该文件的权限(手机root的情况下)。线上环境,建议是使用Bugly啄木鸟 等平台来获取对应的日志信息。

获取到 anr日志 后,先看看主线程的堆栈,是否是因为锁等待导致。接着看看ANR日志中iowait、CPU、GC、system server等信息,进一步确定是I/O问题,或是CPU竞争问题,还是由于大量GC导致卡死

OOM

OOM 主要是由内存泄漏造成的。分析内存泄露的功能有很多,常用的有 LeakCanaryMemory Analyzer(MAT)Memory Profiler等,适用于线下发现内存泄露问题。对于线上,还是推荐使用Bugly啄木鸟 等平台

阅读全文
下载说明:
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.dandroid.cn/archives/22450,转载请注明出处。
0

评论0

显示验证码
没有账号?注册  忘记密码?