这个问题与 traceview 呈现的数据列的含义无关——我想我明白这一点。
在查看在 Android 3.2 设备与 Android 4.1 设备上捕获的 traceview 中的跟踪时,我注意到了几件事。我的问题是这些是否是为较新的 Android 版本所做的已知改进,或者它们是否是设备的限制,或者它们是否不是工件但实际上是有意义的。
我正在比较的两个设备/操作系统
- 三星 Galaxy Tab 10.1 2 核,运行 Android 3.2
- Google Nexus 7 平板电脑,4 核,运行 Android 4.1
我注意到的第一件事是,对于使用 Android 3.2 在三星 Galaxy Tab 上捕获的跟踪,没有“实时”列,只有“CPU 时间”列。有谁知道为什么?
我注意到的第二件事是,尽管搭载 Android 3.2 的三星 Galaxy Tab 有两个内核,但从三星 Galaxy Tab 捕获的 traceview 线程活动行始终显示在任何确切时间点都只运行一个线程。而对于 Google Nexus 7,显示多个线程同时运行。
为这两种设备运行的应用程序是一个测试应用程序,它启动一些线程,然后每个线程(包括主 UI 线程)循环一段时间,计算斐波那契数列。没有理由不能在三星 Galaxy Tab 或任何其他具有 2 核的设备上同时运行这两个线程。此外,当有 2 个线程与只有 1 个线程时,每个线程执行固定数量的计算所花费的时间大致相同 - 所以 2 个线程必须真正按预期同时执行。然后当 2 核设备上有 3 个线程时,每个线程进行计算所需的时间增加了 50%,这正是我所期望的。
所以,我认为这只是在运行 Android 3.2 的三星 Galaxy Tab 10.1 上进行跟踪捕获的限制。在此设备上,用于具有大量调用的“真实”应用程序,traceview 似乎显示两个线程同时运行,但如果我一直放大,活动实际上是交错的,并且永远不会有两个线程同时显示为活动的。