在进入和退出(几次)使用AsyncTask加载某些数据的屏幕后,我有以下ANR。
完整的ANR在这里:http://pastebin.com/g1MDv44Q
一些观察结果:
我还注意到两个SUSPENDED线程似乎处于某种死锁或无限循环中,一个"删除消息"和其他"排队的消息":
"main" prio=5 tid=1 SUSPENDED
| group="main" sCount=1 dsCount=0 obj=0x415dce88 self=0x414fb898
| sysTid=9246 nice=-6 sched=0/0 cgrp=apps handle=1074143572
| state=S schedstat=( 487768247094 88677560041 387007 ) utm=45537 stm=3239 core=3
at android.os.MessageQueue.removeMessages(MessageQueue.java:~472)
at android.os.Handler.removeCallbacks(Handler.java:479)
at android.view.View.removeCallbacks(View.java:11343)
at android.support.v7.widget.RecyclerView$ViewFlinger.stop(RecyclerView.java:3914)
at android.support.v7.widget.RecyclerView.stopScrollersInternal(RecyclerView.java:1641)
at android.support.v7.widget.RecyclerView.setScrollState(RecyclerView.java:1112)
at android.support.v7.widget.RecyclerView.cancelTouch(RecyclerView.java:2252)
at android.support.v7.widget.RecyclerView.onTouchEvent(RecyclerView.java:2237)
at android.view.View.dispatchTouchEvent(View.java:7837)
...
"Thread-28544" prio=4 tid=99 SUSPENDED
| group="main" sCount=1 dsCount=0 obj=0x451703d0 self=0x7bc9d658
| sysTid=13075 nice=10 sched=0/0 cgrp=apps handle=-2111467576
| state=S schedstat=( 4705817143 4247615417 4666 ) utm=444 stm=26 core=3
at android.os.MessageQueue.enqueueMessage(MessageQueue.java:~359)
at android.os.Handler.enqueueMessage(Handler.java:626)
at android.os.Handler.sendMessageAtTime(Handler.java:595)
at android.os.Handler.sendMessageDelayed(Handler.java:566)
at android.os.Handler.sendEmptyMessageDelayed(Handler.java:530)
at android.os.Handler.sendEmptyMessage(Handler.java:515)
at com.android.org.chromium.base.SystemMessageHandler.setTimer(SystemMessageHandler.java:30)
at dalvik.system.NativeStart.run(Native Method)
这种分析是否正确?
如果是,为什么会发生这种情况?如何解决或阻止它呢?
如果不是,对此ANR的正确分析是什么?
答案 0 :(得分:0)
这似乎是M33里程碑中的一个问题(M33影响Android 4.4.3和4.4.4),其中每个计时器事件都会删除处理程序消息并非常快速地重新安排新的计时器消息。在M33之后问题是fixed,但遗憾的是KitKat不支持从Google Play商店更新Chromium,因此如果不更新到Lollipop(5.0)或更高版本,则无法应用修复。可疑线是:
at com.android.org.chromium.base.SystemMessageHandler.setTimer(SystemMessageHandler.java:30)