每个 ANR 转储都列出了 ANR 发生时所有线程的状态。我知道 WAIT
是什么意思,但是 SUSPENDED
和 MONITOR
是什么意思?
提前致谢...
最佳答案
Dalvik 线程状态总结:
- INITIALIZING - 尚未运行。
- 开始 - 尚未运行,但即将运行。
- ZOMBIE - 已故(你不应该看到这个)。
- RUNNING (a/k/a RUNNABLE) - 线程正在运行。 VM 必须挂起所有线程以执行堆栈转储,因此除了正在转储堆栈的线程之外,您通常不会看到任何线程出现这种情况。
- WAIT - 调用 wait() 的线程正在耐心等待。
- TIMED_WAIT - 线程调用 wait(),超时。 (Thread.sleep() 实现为定时等待。)
- MONITOR - 线程被监视器锁阻塞,即它在尝试进入“同步” block 时卡住。
- NATIVE - 线程正在本地代码中执行。 VM 不会挂起 native 代码中的线程,除非它们进行 JNI 调用(此时它们会转换为 RUNNING,然后立即转换为 SUSPENDED)。
- VMWAIT - 线程被阻止获取 VM 资源,如内部互斥锁。或者可能正在等待做某事(例如编译器和 GC 线程)。
- SUSPENDED - 线程可运行,但已被挂起。如前所述,堆栈转储器喜欢在遍历堆栈之前挂起所有线程,因此您的繁忙线程通常会以这种方式显示。 (在旧版本中,此状态不存在;“暂停”曾经是“使用非零 sCount 运行”。)
关于android - Dalvik 线程状态是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23207231/