簡體   English   中英

屏幕關閉時為ANR,與BroadcastReceiver相關

[英]ANR when screen turns off, BroadcastReceiver related issue

我正在使用的應用程序可以在屏幕打開且在任何時間段內正常運行,但是一旦手機進入睡眠狀態並經過10秒鍾,我的logcat就會出現錯誤,

I/art Thread[5,tid=318,WaitingInMainSignalCatcherLoop,Thread*=0xaf60e400,peer=0x12c00080,"Signal Catcher"]: reacting to signal 3

我拉出了跟蹤文件,試圖了解導致此問題的原因,並仔細閱讀了androids頁面上有關應用程序性能的信息,我發現這是由於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)

有人可以指出正確的方向來解決此問題嗎? 我如何找到問題的根本原因。

我曾嘗試(無知)嘗試刪除代碼中的所有廣播接收器,但這並沒有幫助。 為了解決該問題,我擺脫了喚醒鎖,但這也無濟於事。

任何幫助是極大的贊賞。

我在一次操作中遇到了同樣的問題,該操作雖然不需要太多時間,但是由於某種原因,它確實是。

從官方的Android文檔中:

對BroadcastReceiver執行時間的特定限制強調了廣播接收器的作用:在后台進行少量分散的工作,例如保存設置或注冊Notification。 因此,與在UI線程中調用的其他方法一樣,應用程序應避免在廣播接收器中可能長時間運行的操作或計算。 但是, 如果需要響應潛在的長時間廣播而執行長時間運行的操作 ,則應用程序應該啟動IntentService ,而不是通過輔助線程來執行繁重的任務。

http://developer.android.com/training/articles/perf-anr.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM