我的应用程序出现 ANR,我很难找出原因。
通过启动我的应用程序,然后什么都不做,或者按下睡眠按钮,会重现该错误。睡眠后 20 秒,应用程序将冻结。电话重新唤醒时会显示 ANR 消息。
我把它缩小到这个:
Intent startGCM = new Intent(getBaseContext(), GCMService.class);
startGCM.setAction("CONNECT");
startService(startGCM);
这些行作为我的主要活动的启动(onCreate)例程的一部分运行。如果我将它们注释掉,错误就会消失,手机可以根据需要睡眠/唤醒,并且应用程序仍然可以工作。
您会认出这是一个非常简单的服务调用。所以我查看了目标服务,并删除了 onStartCommand() 函数的整个代码。除了 return 语句之外,根本没有代码在运行。但这并不能阻止错误的发生。
我在手机上找到了 traces.txt 文件,但没有提到我的任何代码。这是主线程转储的第一部分,可能也很熟悉:
"main" prio=5 tid=1 NATIVE
| group="main" sCount=1 dsCount=0 obj=0x4127f508 self=0x40f469a0
| sysTid=12711 nice=0 sched=0/0 cgrp=apps handle=1074286384
| schedstat=( 1176280531 686300303 3448 ) utm=93 stm=24 core=0
#00 pc 0000da70 /system/lib/libc.so (epoll_wait+12)
#01 pc 00014899 /system/lib/libutils.so (android::Looper::pollInner(int)+96)
#02 pc 00014b01 /system/lib/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+104)
#03 pc 000634f3 /system/lib/libandroid_runtime.so (android::NativeMessageQueue::pollOnce(_JNIEnv*, int)+22)
#04 pc 0001deb0 /system/lib/libdvm.so (dvmPlatformInvoke+112)
#05 pc 0004d103 /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+394)
#06 pc 000272e0 /system/lib/libdvm.so
#07 pc 0002bbe8 /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+180)
有什么线索吗?对我来说,等待任何事情是没有意义的。是否有另一个文件说明它在等待什么?