ANR即Application Not Responding,顾名思义就是应用程序无响应。在Android中,一般情况下,四大组件均是工作在主线程中的,Android中的Activity Manager和Window Manager会随时监控应用程序的响应情况,如果因为一些耗时操作(网络请求或者IO操作)造成主线程阻塞一定时间(例如造成5s内不能响应用户事件或者BroadcastReceiver的onReceive方法执行时间超过10s),那么系统就会显示ANR对话框提示用户对应的应用处于无响应状态。
"main" prio=5 tid=1 NATIVE | group="main" sCount=1 dsCount=0 obj=0x420a0e58 self=0x4208f918 | sysTid=1182 nice=-2 sched=0/0 cgrp=apps handle=1074594132 | state=S schedstat=( 211672310629149959255867472114 ) utm=13047 stm=8120 core=1 #00 pc 000218b8 /system/lib/libc.so (epoll_wait+12) ... at android.os.MessageQueue.nativePollOnce(Native Method) at android.os.MessageQueue.next(MessageQueue.java:138) at android.os.Looper.loop(Looper.java:123) at com.android.server.ServerThread.initAndLoop(SystemServer.java:1213) at com.android.server.SystemServer.main(SystemServer.java:1317) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609) at dalvik.system.NativeStart.main(Native Method)
...
----- end 1182 -----
----- pid 18927 at 2015-11-2601:53:34 ----- Cmd line: com.android.example
JNI: CheckJNI is off; workarounds are off; pins=0; globals=465 (plus 984 weak)
"main" prio=5 tid=1 SUSPENDED | group="main" sCount=1 dsCount=0 obj=0x41795e58 self=0x416b58b0 | sysTid=13406 nice=-6 sched=0/0 cgrp=apps handle=1074557268 | state=S schedstat=( 23524355248477367279172922633566 ) utm=213075 stm=22168 core=1 at java.lang.String.<init>(String.java:~261) at java.util.zip.ZipEntry.<init>(ZipEntry.java:392) at java.util.zip.ZipFile.readCentralDir(ZipFile.java:414) at java.util.zip.ZipFile.<init>(ZipFile.java:151) at java.util.zip.ZipFile.<init>(ZipFile.java:123) at com.android.example.Utility.isValideFile(Utility.java:2700) at com.android.example.Test.getPath(Test.java:243) at com.android.example.Test$1.run(Test.java:531) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5050) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:807) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:623) at dalvik.system.NativeStart.main(Native Method) ...
"main" prio=5 tid=1 MONITOR | group="main" sCount=1 dsCount=0 obj=0x415a4e88 self=0x414c48d8 | sysTid=9436 nice=0 sched=0/0 cgrp=apps handle=1073926484 | state=S schedstat=( 6712646623372802591005 ) utm=53 stm=14 core=0 at com.example.yxz.myapplication.performancetest.WaitANR$InnerMonitorClass.TimeConsumeFunc(WaitANR.java:~48) - waiting to lock <0x447a5670> held by tid=11 (Thread-14208) at com.example.yxz.myapplication.performancetest.WaitANR$2.run(WaitANR.java:32) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:212) at android.app.ActivityThread.main(ActivityThread.java:5135) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) at dalvik.system.NativeStart.main(Native Method)
....
"Thread-14208" prio=10 tid=11 TIMED_WAIT | group="main" sCount=1 dsCount=0 obj=0x447a4b98 self=0x78296bb8 | sysTid=9955 nice=-8 sched=0/0 cgrp=apps handle=2015978016 | state=S schedstat=( 9460456408691 ) utm=0 stm=0 core=2 at java.lang.VMThread.sleep(Native Method) at java.lang.Thread.sleep(Thread.java:1013) at java.util.concurrent.TimeUnit.sleep(TimeUnit.java:331) at com.example.yxz.myapplication.performancetest.WaitANR$InnerMonitorClass.TimeConsumeFunc(WaitANR.java:48) at com.example.yxz.myapplication.performancetest.WaitANR$1.run(WaitANR.java:20) at java.lang.Thread.run(Thread.java:841)