首页 > 代码库 > FATAL&ANR问题快速分析教程

FATAL&ANR问题快速分析教程

要阅读本文内容,请先去查看参考连接文章,本文注重解决与总结FATAT&ANR问题的步骤。

1. FATAL&ANR


  FATAL:程序异常退出(uncausedexception)与程序强制关闭(ForceClosed)【我经常碰到的是空指针异常(NullPointerException),主要讲解空指针异常的处理】;

  ANR:应用无响应(Application Not Responding)【我经常碰到的是KeyDispatchTimeout,主要讲解按键分发超时无响应处理】;

  问题来源:软件版本发布前,进行Monkey自动化测试(它向系统发送伪随机的用户事件流(eg:按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。),将潜在的bug进行修复;

  解决办法:观察输出日志与data/anr/trace.txt。

2. FATAL&ANR快速解决教程


2.1 问题

  出错日志定位,将版本未上线的bug进行修复。

2.2 解决问题过程

2.2.1 FATAL问题解决过程:

  1、出错日志中搜索关键字:“NullPointerException”

    会看到错误代码段,分析错误代码段的原因,为什么会出现空指针异常?

    工作中遇到过的有:

    异步回调线程中,由于Activity被销毁了与网络阻塞的原因(一定概率会发生),异步线程回调Activity的方法,导致FATAL问题。原因很简单:Thread的运行是独立与Activity的,也就是说当一个Activity被finish之后,如果没有主动停止Thread或者Thread里的run方法没有执行完毕的话,Thread也会一直执行。

2.2.2 ANR问题解决过程:

  1、出错日志中搜索关键字:“ANR in”:

    I、查看发生的Activity(注意,发生ANR的Activity不一定出现ANR问题的根源)

    II、查看ANR类型

    技术分享

    III、查看CPU使用前后用量

    技术分享

  2、出错日志中搜索关键字:“sig: 3”

    I、查看生成traces文件的时间及第1个PID号(在Android设备下的/data/anr/traces.txt)

    II、根据PID号去查看前10秒做了什么样的操作(重点关注带“E”)

  3、traces.txt文件内容中搜索关键字:“cmd_line”查看发生的进程

    I、查看Looper等待下消息进行消息队列(主要查看非Android原生包类的方法)【结合io wait问题高:是否在handleMessage处理消息过长?给出解决办法:新建线程处理耗时过长的io操作

3. FATAL&ANR总结


  1、出错日志定位是FATAL还是ANR问题;

  2、若是ANR问题,先查看出错日志文件内容,再查看traces.txt文件内容给出分析步骤以及解决办法【一般比较难定位与解决】。

4. 参考:


  1、http://www.cnblogs.com/purediy/p/3225060.html【Android ANR分析解决办法】

FATAL&ANR问题快速分析教程