稳定性 -- Crash & ANR

一、Crash

1.Java层crash

Java层的crash一般可以在日志中看到发生问题时的调用栈,比较容易定位问题。

2.Native层crash

Native层的crash一般只能看到发生问题时相关的地址和简单的原因,需要结合native的调用栈和日志中的上下文进行分析。

Linux Signal:对应Java层的Exception。

Linux Signal 列表

常见Signal:

信号 取值 默认动作 含义(发出信号的原因)
SIGABRT 6 Core 来自abort的异常信号[Assert]
SIGSEGV 11 Core 段非法错误(内存引用无效)[Segment fault]

二、ANR

1.ANR检测原理

ANR(Application Not Responding)是指应用程序无响应,Android系统规定一些事件必须在一定时间范围内完成,如果超过预定时间未能得到有效响应或者响应时间过长,都会造成ANR。

ANR由消息处理机制保证,Android在系统层实现了一套精密的机制来检测ANR,核心原理是消息调度和超时处理。

2.ANR分析方法

1.分析ANR日志

  • 搜索关键词:“ANR in”、“am_anr”,查看ANR的时间、进程、简单的原因、CPU使用情况。

  • 搜索关键词:"cmd line.*com.tomorrow.test"(正则表达式),查看线程堆栈信息。

  • 其他关键词:"MEMORY INFO"、"MEMINFO in pid.*com.tomorrow.test"(正则表达式)、"frames"、"strictmode"等。

2.分析是否native层crash导致ANR

  • 搜索关键词:“Fatal signal”。

3.分析是否业务逻辑缺陷导致ANR

  • 应用程序业务逻辑有缺陷,或者在某些异常场景触发了此缺陷,如主线程堵塞、死循环等。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容