我相信已经确定我的预感是正确的。
我进行了一些简单的测试,例如:
long start = SystemClock.uptimeMillis();
Log.d("blah", "start");
while (SystemClock.uptimeMillis() < start + 10000)
{
// do some work-intensive stuff here
}
Log.d("blah", "finish");
...无论我在中间 10 秒内做了什么(在代码循环内和/或故意使用我的计算机做其他事情来加载 CPU),线程总是在它启动后 10 秒准确地报告回来(+10 毫秒,开销我假设),从 LogCat 时间戳和秒表来看,它告诉我加载的主机 CPU 根本不会像预期的那样扩大模拟器中的时间感。
为了改变这种行为,我相信我想将一个选项传递给 QEMU 层:
$ emulator -avd my_avd -qemu -clock vm
但这实际上可能只与设置启动 VM 的时间有关(QEMU 显然确实独立于管理 currentTimeMillis()、uptimeMillis() 和 nanoTime() 的结果而做)。不确定(QEMU 的文档非常粗糙。)无论如何,Android QEMU 似乎缺少“vm”时钟,所以上述方法不起作用。笔记:
$ emulator -avd my_avd -qemu -clock ?
Available alarm timers, in order of precedence:
unix
但至少我已经收集到足够的证据来怀疑我的小理论是正确的。:-) 我看不到模拟应用程序如何在没有链接到真实时钟的情况下播放音频或执行 UI 过渡效果等,所以这是有道理的。但是如果可以选择模拟时钟就好了。