ANR正确解读,准确定位并解决的思路与方法?最近自己定制的系统动不动出现ANR对话框,搞的头痛死了.大家有没好的解决思路与方法?怎么正确解读,准确定位?

解决方案 »

  1.   

    Android中对Log日志文件的分析 
    http://blog.csdn.net/xqhrs232/article/details/7306895定位到关键的事件信息如下:
    01-1516:49:02.433 E/ActivityManager( 2466): ANR in com.android.mms(com.android.mms/.ui.SlideshowActivity)
    01-1516:49:02.433 E/ActivityManager( 2466): Reason:keyDispatchingTimedOut
    01-1516:49:02.433 E/ActivityManager( 2466): Load: 0.6 / 0.61 / 0.42
    01-1516:49:02.433 E/ActivityManager( 2466): CPU usage from 1337225ms to57ms ago:
    01-1516:49:02.433 E/ActivityManager( 2466):   sensorserver_ya:8% = 0% user + 8% kernel / faults: 40 minor
    ......
    01-1516:49:02.433 E/ActivityManager( 2466):  -com.android.mms:0% = 0% user + 0% kernel
    01-1516:49:02.433 E/ActivityManager( 2466):  -flush-179:8: 0% =0% user + 0% kernel
    01-1516:49:02.433 E/ActivityManager( 2466): TOTAL: 25% = 10% user + 14%kernel + 0% iowait + 0% irq + 0% softirq
    01-1516:49:02.436 I/        ( 2466):dumpmesg >"/data/log/dumpstate_app_anr.log"
    我们用自然语言来描述一下日志,这也算是一种能力吧。 
    01-1516:49:02.433 E/ActivityManager( 2466): ANR in com.android.mms(com.android.mms/.ui.SlideshowActivity)
    翻译:在16:49分2秒433毫秒的时候ActivityManager(进程号为2466)发生了如下错误:com.android.mms包下面的.ui.SlideshowActivity无响应。01-1516:49:02.433 E/ActivityManager( 2466): Reason:keyDispatchingTimedOut
    翻译:原因,keyDispatchingTimeOut-按键分配超时 01-1516:49:02.433 E/ActivityManager( 2466): Load: 0.6 / 0.61 /0.42
    翻译:5分钟,10分钟,15分钟内的平均负载分别为:0.6, 0.61 ,0.42
      

  2.   

    分析你的Android ANR错误
    http://www.android123.com.cn/androidkaifa/794.htmlAndroid 通过ANR来查看死锁
    http://www.eoeandroid.com/code/2011/1220/446.html
      

  3.   

    [转]Android最佳实践之响应灵敏性
    http://blog.chinaunix.net/space.php?uid=20783399&do=blog&id=1845036
    ######################################Android ANR分析15:59:37 I/ActivityManager(130): ANR in process: com.android.email (last in com.android.email)=>frameworks\base\services\java\com\android\server\am\ActivityManagerService.java
    =>提示输出cpu信息Annotation: keyDispatchingTimedOut
    CPU usage:=>frameworks\base\services\java\com\android\server\ProcessStats.java
    =>输出cpu当前状态=>/proc/loadavg 显示cpu负荷
    =>1-分钟平均负载 / 5-分钟平均负载 / 15-分钟平均负载
    Load: 4.37 / 4.55 / 3.97
    =>cpu状态的时间段
    CPU usage from 10987ms to 27ms ago:  =>/proc/state读取cpu的使用情况
      =>http://linux.die.net/man/5/proc
      =>user
      =>kernel
      =>iowait
      =>irq -> 0
      =>softirq -> 0
      =>minor  The number of minor faults the process has made which have not required loading a memory page from disk.   =>major  The number of major faults the process has made which have required loading a memory page from disk.
      system_server: 12% = 4% user + 7% kernel / faults: 1886 minor
      m.android.email: 12% = 6% user + 5% kernel / faults: 2716 minor
      sensorserver_ya: 7% = 0% user + 7% kernel
      breeze.launcher: 3% = 0% user + 3% kernel / faults: 94 minor
      ocess.msn.shell: 0% = 0% user + 0% kernel / faults: 38 minor
      m.android.phone: 0% = 0% user + 0% kernel
      alog: 0% = 0% user + 0% kernel
      rpcrotuer_smd_x: 0% = 0% user + 0% kernel
      rild: 0% = 0% user + 0% kernel
      alog: 0% = 0% user + 0% kernel
      events/0: 0% = 0% user + 0% kernel
      port-bridge: 0% = 0% user + 0% kernel
    TOTAL: 81% = 13% user + 25% kernel + 42% iowait
    15:59:37 I/ActivityManager(130): Removing old ANR trace file from /data/anr/traces.txt
      

  4.   

    避免Android开发中的ANR 
    http://blog.csdn.net/xqhrs232/article/details/7350815
    Android ANR keyDispatchingTimedOut Error 之 Painless Threading http://blog.csdn.net/wwang196988/article/details/6786764浅谈ANR及如何分析解决ANR
    http://www.360doc.com/content/12/0226/15/7635_189765894.shtml浅谈ANR及如何分析解决ANR(2)
    http://www.360doc.com/content/11/1026/11/5600807_159283573.shtml
    android-writing-zippy-android-apps.pdf
    http://dl.google.com/googleio/2010/android-writing-zippy-android-apps.pdf
      

  5.   

    举个ANR完整的例子ERROR/ActivityManager(2099): ANR in com.android.launcher(com.android.launcher/com.android.launcher2.launcher)ERROR/ActivityManager(2099): Reason:keyDispatchingTimeOut
    ERROR/ActivityManager(2099): Load 8.94/5.62/2.83
    ERROR/ActivityManager(2099): CPU usage from 12750ms to 1460ms ago:
    ERROR/ActivityManager(2099): 92% 2032/MAP100serial:17% user + 75% kernel 
    ERROR/ActivityManager(2099): 4.7% 2417/com.android.myApp:2.8% user + 1.9% kernel 
    ERROR/ActivityManager(2099): 1.1% 2099/system_server:0.6% user + 0.5% kernel  /faults:66 minor
    ERROR/ActivityManager(2099): 0.7% 4/events/0:0.0% user + 0.7% kernel 
    ERROR/ActivityManager(2099): 0% 2172/com.android.inputmethod.latin:0% user + 0% kernel 
    ERROR/ActivityManager(2099): 0% 2268/wpa_supplicant:0% user + 0% kernel 
    ERROR/ActivityManager(2099): 0% 2493/com.android.browser:0% user + 0% kernel  /faults:12 minor
    ERROR/ActivityManager(2099): 100% TOTAL:20% user + 79% kernel 
    ERROR/ActivityManager(2099): CPU usage from 334ms to 848ms later:
    ERROR/ActivityManager(2099): 92% 2032/MAP100serial:15% user + 76% kernel 
    ERROR/ActivityManager(2099): 92% 2044/MAP100serial:15% user + 76% kernel ERROR/ActivityManager(2099): 3.9% 2417/com.android.myApp:3.9% user + 0% kernel 
    ERROR/ActivityManager(2099): 1.9% 2435/com.android.myApp:1.9% user + 0% kernel 
    ERROR/ActivityManager(2099): 1.9% 2492/com.android.myApp:1.9% user + 0% kernel 
    ERROR/ActivityManager(2099): 1.9% 2099/system_server:0% user + 1.9% kernel 
    ERROR/ActivityManager(2099): 1.9% 2100/HeapWorker:1.9% user + 0% kernel 
    ERROR/ActivityManager(2099): 1.9% 2131/InputDispatcher:0% user + 1.9% kernel 
    ERROR/ActivityManager(2099): 100% TOTAL:19% user + 80% kernel 
      

  6.   

    ERROR/ActivityManager(2099): 92% 2032/MAP100serial:15% user + 76% kernel 
    ERROR/ActivityManager(2099): 92% 2044/MAP100serial:15% user + 76% kernel 怎么会开启两个守户进程?并且他们的PID号还不一样,奇怪了呢?!
      

  7.   

    ERROR/ActivityManager(2099): 92% 2032/MAP100serial:15% user + 76% kernel  
    ERROR/ActivityManager(2099): 92% 2044/MAP100serial:15% user + 76% kernel  
    但是用PS显示进程PID号只看到一个啊!怎么出来个副本?守护进程的启动我用了oneshot开关啊----应该就只会启动一次啊!CPU usage from 12750ms to 1460ms ago:----表示发生ANR之前的系统CPU状况
    CPU usage from 334ms to 848ms later:----表示发生ANR之后的系统CPU状况

      

  8.   

    请教 android service ANR问题 
    http://bbs.189works.com/thread-40746-1-1.html
      

  9.   

    Linux系统调用--fcntl函数详解 
    http://www.cnblogs.com/papam/archive/2009/09/02/1559154.html文件锁fcntl( )函数说明http://www.360doc.com/content/11/0110/14/1317564_85469431.shtml
      

  10.   

    Android ANR问题的分析和解决 
    http://wenku.it168.com/d_000083535.shtml
      

  11.   

    最近一直被这样的问题困扰!!!不知道怎么定位ANR。怎么调试ANR发生的代码。
      

  12.   

    没那么复杂,在data下有个anr文件夹,里面有个trace.txt文件,记录了最近一次ANR发生在哪一行以及原因
      

  13.   

    ANR由那个文件打印出来----frameworks\base\services\java\com\android\server\ProcessStats.java
    1》printCurrentState( )----CPU usage from 
    2》printProcessCPU( )
      

  14.   

    ANR由\frameworks\base\services\java\com\android\server\Am\ActivityManagerService.java中的appNotResponding( )函数打印出来
      

  15.   

    最近是乎把这个问题找到了-----自己开的线程里面有WHILE死循环---修改为SELECT函数来阻塞线程就不怎么见ANR窗口弹出来了,看LOGCAT也不见ANR消息打印出来,看来就是这个WHILE死循环影响的。希望真正的情况确实如此啊!