Android应用ANR如何分析

Android应用卡死如何分析

Android应用在使用过程中,常常会出现应用卡死无响应的情况,那么针对此类的问题,我们应该怎么去分析呢?

应用ANR的几种类型

首先,我们需要明确,应用发生ANR类问题,其原因可能是应用自身的问题,也可能是系统侧问题,也有可能是测试工具引发的。举个栗子,我们在测试稳定性的时候,拉起的Activity都是随机的,但是有些Activity的拉起是需要前一个页面参数的,若直接拉起,就会出现应用ANR问题,这样的问题就不能归结于应用,而属于Monkey特有问题归类,其他类问题比如因虚拟机重启导致的故障,又可以归类为系统自身问题,所以明确ANR类问题的界定及分析方法,有助于我们快速界定问题种类,从而简化开发的工作量。

那么ANR类问题在哪些场景下会触发呢?

应用层:
1、应用主线程阻塞
2、应用Activity切换超时
3、焦点窗口异常(系统侧也会出现此类问题)

系统侧:
1、系统线程异常
2、Binder线程、系统探针异常

上面这些只是简单罗列出目前ANR常见的几类问题,那么我们就以上几类问题先来简单分析下ANR类问题应该如何分析。

1、应用主线程阻塞

应用主线程我们有时也称之为“UI线程”,这个比较简单,我们在分析应用的时候,根据日志中ANR时间点找到对应线程,查看应用的线程此时在做什么操作,如果发现此时的线程正在处理一个消息,而却一直没有完成,就会出现应用ANR。分析的思路就是先确定问题发生时间点,然后去确定主线程,看看此时主线程是否有异常

2、应用Activity切换超时

关于应用Activity切换的问题,这类问题也是同样的思路,先根据日志找到问题发生的时间点,然后找到对应的对应的包名、进程号、正在处理的事件,以及处理时长,根据上面的信息来判断是处于那种情况下的切换导致Activity切换过长导致的ANR

3、应用窗口异常

窗口异常问题更容易分析,从日志中我们可以清晰的看到有“not focus on window”的字段,还是根据应用包名,进程ID来判断首先是否是应用自生的问题,是则进行深入分析,看下是在哪个页面触发了此类场景

4、应用锁

最后我们在来看下应用锁的问题,这类问题在ANR中也非常常见,在日志中我们可以搜索“waiting to lock”的字段,这类问题我们在分析的时候,关注喜爱Binder对端调用栈的信息,以此来分析是应用的哪个线程在等待什么锁,又是什么线程在持有这把锁

这里先简单的梳理下我们在遇到ANR类问题的一点分析思路,后续我们在从实例中分析ANR类问题。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值