我正在处理的应用程序,在屏幕打开时正常工作,并且持续一段时间,但是一旦手机进入睡眠状态并且已经过了10秒,我的logcat中出现错误,
I/art Thread[5,tid=318,WaitingInMainSignalCatcherLoop,Thread*=0xaf60e400,peer=0x12c00080,"Signal Catcher"]: reacting to signal 3
我删除了跟踪文件并尝试了解导致此问题的原因并通过androids page阅读有关应用程序性能的信息,我已经发现,这是因为BroadcastReceiver未在10中执行秒,
BroadcastReceiver还没有在10秒内完成执行。
通过阅读跟踪文件,我认为这与广播屏幕的超时和未完成的操作有关。
"ActivityManager" prio=5 tid=16 TimedWaiting
| group="main" sCount=1 dsCount=0 obj=0x12d41970 self=0xac884400
| sysTid=859 nice=-2 cgrp=apps sched=0/0 handle=0xb50e9e80
| state=S schedstat=( 443987410679 259509083288 699634 ) utm=18416 stm=25982 core=2 HZ=100
| stack=0xa14fa000-0xa14fc000 stackSize=1036KB
| held mutexes=
at java.lang.Object.wait!(Native method)
- waiting on <0x03423764> (a com.android.server.am.ActivityManagerService$6)
at java.lang.Object.wait(Object.java:422)
at com.android.server.am.ActivityManagerService.dumpStackTraces(ActivityManagerService.java:4969)
- locked <0x03423764> (a com.android.server.am.ActivityManagerService$6)
at com.android.server.am.ActivityManagerService.dumpStackTraces(ActivityManagerService.java:4946)
at com.android.server.am.ActivityManagerService.appNotResponding(ActivityManagerService.java:5187)
at com.android.server.am.BroadcastQueue$AppNotResponding.run(BroadcastQueue.java:171)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.os.HandlerThread.run(HandlerThread.java:61)
at com.android.server.ServiceThread.run(ServiceThread.java:46)
有人可以指出我正确的方向来解决这个问题吗? 如何找到问题的根本原因。
我曾尝试过(在我的无知中)我尝试删除代码中的所有广播接收器,这显然没有帮助。 我摆脱了wakeLocks试图解决这个问题,但这也没有帮助。
非常感谢任何帮助。
答案 0 :(得分:0)
我在这里遇到的问题与不应该花费太多时间的操作有关,但出于某种原因,它是。
来自官方Android文档:
BroadcastReceiver执行时间的具体约束强调了广播接收器的意图:在后台进行小的,离散的工作量,例如保存设置或注册通知。因此,与UI线程中调用的其他方法一样,应用程序应避免在广播接收器中进行长时间运行或计算。但是,不是通过工作线程执行密集型任务,如果需要采取可能长时间运行的操作来响应意图广播,应用程序应启动IntentService。
http://developer.android.com/training/articles/perf-anr.html