HeapTaskDaemon 阻止了 ANR。其他线程似乎处于等待状态

ram*_*mpr 5 heap mobile android cocos2d-x android-anr-dialog

我们有一个 ANR,其中 HeapTaskDaemon 被阻塞,主线程正在等待而不是忙碌/阻塞。在任何线程中都没有我们的代码部分。如何调试这个 ANR?从我看来,没有死锁,也没有在主线程上做任何繁重的工作。

它似乎也不是 INTENT 中的长时间运行操作。

任何了解 ANR 的旅行都会非常有帮助。还有 HeapTaskDaemon 等待锁定未知对象是什么意思?

这是HeapTaskDaemon 线程:

HeapTaskDaemon" daemon prio=5 tid=6 Blocked
  | group="system" sCount=1 dsCount=0 flags=1 obj=0x140c0338 self=0xa41d1400
  | sysTid=1239 nice=4 cgrp=default sched=0/0 handle=0x99e3b970
  | state=S schedstat=( 0 0 0 ) utm=515 stm=86 core=1 HZ=100
  | stack=0x99d39000-0x99d3b000 stackSize=1038KB
  | held mutexes=

  #00  pc 000000000001902c  /system/lib/libc.so (syscall+28)
  #01  pc 00000000000b7289  /system/lib/libart.so (art::ConditionVariable::WaitHoldingLocks(art::Thread*)+88)
  #02  pc 00000000001cc795  /system/lib/libart.so (art::gc::TaskProcessor::GetTask(art::Thread*)+284)
  #03  pc 00000000001ccd75  /system/lib/libart.so (art::gc::TaskProcessor::RunAllTasks(art::Thread*)+44)
  #04  pc 00000000000551e3  /system/framework/arm/boot-core-libart.oat (Java_dalvik_system_VMRuntime_runHeapTasks__+74)
  at dalvik.system.VMRuntime.runHeapTasks (Native method)
- waiting to lock an unknown object
  at java.lang.Daemons$HeapTaskDaemon.runInternal (Daemons.java:461)
  at java.lang.Daemons$Daemon.run (Daemons.java:103)
  at java.lang.Thread.run (Thread.java:764)
Run Code Online (Sandbox Code Playgroud)

主线:

"main" prio=5 tid=1 Native
  | group="main" sCount=1 dsCount=0 flags=1 obj=0x70cb3f08 self=0xac6a8000
  | sysTid=1230 nice=-2 cgrp=default sched=0/0 handle=0xb07a64a4
  | state=S schedstat=( 0 0 0 ) utm=2107 stm=662 core=1 HZ=100
  | stack=0xbe6e0000-0xbe6e2000 stackSize=8MB
  | held mutexes=

  #00  pc 0000000000049658  /system/lib/libc.so (__epoll_pwait+20)
  #01  pc 000000000001b7b5  /system/lib/libc.so (epoll_pwait+60)
  #02  pc 000000000001b7e5  /system/lib/libc.so (epoll_wait+12)
  #03  pc 000000000001008b  /system/lib/libutils.so (android::Looper::pollInner(int)+118)
  #04  pc 000000000000ff7d  /system/lib/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+32)
  #05  pc 00000000000b2d0d  /system/lib/libandroid_runtime.so (android::NativeMessageQueue::pollOnce(_JNIEnv*, _jobject*, int)+24)
  #06  pc 00000000000ba5d5  /system/framework/arm/boot-framework.oat (Java_android_os_MessageQueue_nativePollOnce__JI+92)
  at android.os.MessageQueue.nativePollOnce (MessageQueue.java)
  at android.os.MessageQueue.next (MessageQueue.java:325)
  at android.os.Looper.loop (Looper.java:142)
  at com.android.server.SystemServer.run (SystemServer.java:423)
  at com.android.server.SystemServer.main (SystemServer.java:274)
  at java.lang.reflect.Method.invoke (Method.java)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:438)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:787)
Run Code Online (Sandbox Code Playgroud)

完整的 ANR 日志位于https://pastebin.com/i4F4VgTS