一,项目背景,

       商业项目,用于商铺柜台接单的,需要使用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之间的交互

 

 

       

更多相关文章

  1. android HandlerThread使用小例
  2. Android中消息处理机制-Handler剖析
  3. AsyncTask学习笔记
  4. onDraw调用和android中Invalidate和postInvalidate的区别
  5. Android(安卓)JSON使用(二):解读org.json包
  6. 一些databinding 赋值小技巧
  7. 拨云见日---android异步消息机制源码分析(二)
  8. Android(安卓)音视频学习系列(一) JNI 从入门到精通
  9. Android(安卓)扫一扫功能实现(Zbar)

随机推荐

  1. Android上定义播放器控件UniversalVideoV
  2. Android源码分析系列-整理篇
  3. 什么是Mono for Android?
  4. 『转』Android(安卓)推送方式
  5. Android(安卓)so文件浅析
  6. android中动态实现spinner下拉菜单
  7. C#:Android的未来?
  8. 关于AndroidManifest.xml中activity标签
  9. Grnymotion模拟器和Android真机访问PC端T
  10. android 之 长度单位