我正在开发一个运行实时线程的应用程序。
我的电脑很慢,模拟器在上面运行的也很慢。当我测试我的应用程序时,似乎SystemClock.uptimeMillis()调用返回的是来自实际计算机时钟的实时值,这意味着即使仿真器运行缓慢,仿真器中的时间也不会运行缓慢。
这种预感是正确的吗?仿真器时钟与真实计算机系统时钟相关联(而不是自身被仿真,并根据主机的CPU负载而波动)?这似乎是一个显而易见的问题,但我在网上找不到。
如果是这样的话,这是有意义的。我需要确定,因为我需要知道我的线程跟不上是模拟器运行缓慢的症状,还是我真的需要重新设计东西。(不能在真正的手机上测试,因为我还没有)。
发布于 2011-04-26 15:11:32
我相信我的预感是正确的。
我运行了一些简单的测试,例如:
long start = SystemClock.uptimeMillis();
Log.d("blah", "start");
while (SystemClock.uptimeMillis() < start + 10000)
{
// do some work-intensive stuff here
}
Log.d("blah", "finish");从...regardless时间戳和秒表来判断,线程总是在启动后的10秒(+10ms,我假设是开销)返回报告,它告诉我,负载的主机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过渡效果或类似效果,所以这是有意义的。但是,如果可以选择模拟时钟,那就太好了。
https://stackoverflow.com/questions/5774612
复制相似问题