Android 如何从traces.txt知道线程处于当前状态的时间

Android 如何从traces.txt知道线程处于当前状态的时间,android,android-activity,android-anr-dialog,Android,Android Activity,Android Anr Dialog,例如,如果我有traces.txt文件,线程的状态如下所示: "callActivityManagerForStrictModeDropbox" prio=5 tid=71 Suspended | group="main" sCount=1 dsCount=0 obj=0x13394a00 self=0x42746c00 | sysTid=1659 nice=10 cgrp=bg_non_interactive sched=0/0 handle=0x7b491e80 | state=S sche

例如,如果我有
traces.txt文件
,线程的状态如下所示:

"callActivityManagerForStrictModeDropbox" prio=5 tid=71 Suspended
| group="main" sCount=1 dsCount=0 obj=0x13394a00 self=0x42746c00
| sysTid=1659 nice=10 cgrp=bg_non_interactive sched=0/0 handle=0x7b491e80
| state=S schedstat=( 264773038 522311652 63568 ) utm=0 stm=26 core=1 HZ=100
| stack=0x7d40c000-0x7d40e000 stackSize=1036KB

从上面的数据中,有没有办法知道线程处于挂起状态的持续时间有多长?

没有状态更改时间戳。您无法判断线程处于当前状态的时间

schedstat和utm/stm可以在两个连续堆栈跟踪之间进行比较,以查看线程是否在平均时间内执行,但这对ANR没有真正的帮助


在Dalvik中,ANR输出中处于挂起状态的线程在ANR处理程序唤醒之前应该处于运行状态——挂起线程是为了收集ANR报告的堆栈跟踪。您的跟踪似乎来自ART,我无法与之交谈,但如果它以类似的方式表现,我不会感到惊讶,在这种情况下,您的问题很容易回答(“不是很长”)。

此打印来自错误报告,而不是R跟踪。但是,我不确定线程是否也挂起用于跟踪bugreport的堆栈跟踪。使用了相同的机制。从正在运行的线程获取堆栈跟踪可能会产生不太有用的结果。