Android ANR原因分析(基于traces.txt文件),

一,项目背景,

       商业项目,用于商铺柜台接单的,需要使用Android的通话功能。在响铃瞬间,界面出现卡顿,接着导致整个相关联的通话软件卡段(包括系统通话软件)

二,导出traces.txt文件


   adb shell pull /data/data/anr/traces.txt  c:\traces.txt

 

三,分析文件
    

     关键字 Cmd line,找到进程名称,
               "main" prio=5 tid=1 Native  
    看到自己的包名就知道是从哪个包名哪个类出问题了。

      一,导致ANR有以下几个方面

            1,按键或触摸事件在特定时间内无响应

            2,BroadcastReceiver在特定时间内(10秒)无法处理完成

            3,Service在特定的时间内无法处理完成,具体的超时时间的定义在framework下的ActivityManagerService.java

    二:为什么会超时呢?

        超时时间的计数一般是从按键分发给app开始。超时的原因一般有两种:

       1,当前的事件没有机会得到处理(即UI线程正在处理前一个事件,没有及时的完成或者looper被某种原因阻塞住了)

       2,当前的事件正在处理,但没有及时完成

       3,机器的cpu处理能力不够,不足以响应复杂的数据处理

  三:如何避免KeyDispatchTimeout

      1,UI线程尽量只做跟UI相关的工作

     2,耗时的工作(比如数据库操作,I/O,连接网络或者别的有可能阻碍UI线程的操作)把它放入单独的线程处理

    3,尽量用Handler来处理UIthread和别的thread之间的交互

 

 

       

你可能感兴趣的:(Android)