2010-05-23 100 views
14

我正在研究编写Android游戏,我很难拥有Android设备。对于那些拥有设备的人来说,仿真器上的性能如何与真实的设备性能相关联?我对图形相关的任务特别感兴趣。Android仿真器性能与真实设备性能相比如何?

这显然取决于运行模拟器的机器和有问题的特定设备,但我在这里说粗略的数字。

这个问题是duplicate,但由于该帖子严重过时,我认为它现在是不相关的。

回答

13

一般来说,仿真器比CPU和GPU任务中的设备慢得多。这至少有两个方面的原因:

  1. 模拟器运行ARM的操作码,将它们转换成等价的x86指令,这是缓慢的
  2. 设备(通常)图形加速器,而仿真环境中并非如此,但无论视频卡你运行模拟器的机器上

为了说明问题,我使用一块相当不错的显卡在英特尔四核2.66GHz上做Android工作。对于在设备上正常工作的视频,我可以有时让他们在模拟器中播放。

虽然在“磁盘”I/O处,模拟器比设备快。当您在模拟器上写入“flash”时,假设您没有使用SSD,则您正在写入可能驻留在常规硬盘驱动器上的磁盘映像文件。实际上,在设备上写入闪存的速度可能会大大降低 - 在上周的Google I | O 2010大会上,Brad Fitzpatrick引用了高达200ms的高峰来写入单字节闪存。而且,Android,Flash和yaffs2文件系统的组合显然会导致设备在闪存填充时闪存I/O逐渐变慢。因此,他的建议是在后台线程中写入任何闪存,而不是主应用程序线程,在那里它可以绑定用户界面并导致一个“janky”应用程序。

(显然,“janky”是一个技术术语... :-)

顺便说一句,当它在网上显示出来,绝对看布拉德在YouTube上的演示文稿。有时可能有点难以跟上,因为他说得很快,但是它充满了有关表演的有用花絮。

+0

谢谢,这是有用的信息。在同样的问题上,模拟器是否使用与设备相同的虚拟机?特别是,我应该期待类似的GC活动吗? – uj2 2010-05-23 20:59:15

+0

如果用“VM”表示运行用Java编写的应用程序的Dalvik VM,那么是的。就GC活动而言,潜在差异的唯一来源是应用程序堆最大大小。老设备,我认为模拟器,限制你到一个16MB的堆。具有更多RAM和更大屏幕的较新设备支持24MB堆。目前还不清楚是否有一种方法可以控制模拟器中的应用程序堆大小。无论如何,您可能都希望对较小的堆大小进行测试。 – CommonsWare 2010-05-23 21:09:32

+0

我在模拟器上有代码的运行时问题,一个tabactivity需要8-10秒来加载模拟器,在真实设备上花费1-2秒,几乎看不到滞后。 – Pentium10 2010-05-23 21:09:36

1

如上所述,将ARM操作码转换为x86是模拟器滞后的主要原因。

根据我的经验,模拟器确实非常慢,而且非常不能代表设备,尤其是Snapdragon处理器的预期功能。

即使模拟器中的非常基本的应用程序(我正在谈论带有几个TextView的LinearLayout)也需要一段时间来加载和执行活动。

然而,大多数情况下,滞后似乎是最初的。我的意思是,如果您在模拟器中滚动列表,则需要第一时间才能识别该动作,并且一开始会有点生涩,但之后会变得更加平滑。

总之,我不会建议开发一款游戏,除了初始编程,调试以及可能了解活动的布局外,还可以使用仿真器进行其他任何操作。没有真正的设备,你就不会有任何可玩性的想法。



P.S.不要忘记在不同版本的Android上测试你的游戏,并寻找在不同版本的Android游戏中遇到的常见问题。

+0

我希望他们像Palm那样编译x86的模拟器,尽管他们的手机使用的是针对ARM处理器编译的webOS版本。使用Android也无法轻松完成这项任务吗? – Vitaly 2010-06-17 09:27:19

2

检查这个不错article它显示了如何将仿真器的CPU速度与使用BogoMIPS的设备的CPU速度进行比较。