为什么Android模拟器比iPhone模拟器慢得多?

4

只是好奇,苹果的iPhone模拟器做得很出色吗?

当对比在i7上运行的Android模拟器和在i3上运行的iPhone模拟器时,iPhone模拟器比真实的iPhone更快。

我是没有设置正确吗?


1
是的,这是真的,模拟器(供您参考)比模拟器慢。 - MKJParekh
根据我的经验,Android模拟器比iOS模拟器快得多。 - Muhammad bin Yusrat
8个回答

19

这是一项架构决策:

  • iOS模拟器在本地CPU上运行原生代码 - 项目必须重新编译为x86架构才能与模拟器一起使用。模拟器本身只是模拟所有iOS APIs。

  • 另一方面,Android模拟器使用QEMU来运行ARM(或x86,但ARM更流行)CPU虚拟机,并在其之上运行所有软件堆栈 - Linux内核,Android系统映像等。将其视为模拟的硬件。

这是一种权衡 - iOS的做法更快,但很难使其完全兼容目标系统。对于苹果公司来说可能更简单,因为iOS和Mac OS有许多共同点。

对于Android而言,模拟整个堆栈非常有意义 - 更容易构建跨平台SDK,更容易使用它测试某些系统级组件等。这只是一个不同的生态系统,具有不同的目标。请不要忘记,例如可以使用Android模拟器测试使用Android NDK编译的本机ARM库。

今天,Android模拟器的性能或多或少已经可以接受,但在早期的Android时代,它只是一场灾难。话虽如此,个人认为为Android提供快速的API级本地模拟器将是SDK的一个很好的补充,可以使测试较不要求的项目更快。

有趣的阅读:http://logic-explained.blogspot.com/2011/09/why-is-there-no-x86-native-emulator-for.html


2
这个答案有点老了,但关于ARM模拟器仍然提供了很好的信息。现在有使用Intel HAX的新型模拟器。如果您有设置虚拟化的Intel CPU,则可以获得更高的性能。图形部分仍然会很慢,但您可以降低分辨率来补偿。我也成功地在虚拟机上运行了Android x86(在VM上按Ctrl-F1,输入netcfg。按Ctrl-F7返回GUI。在开发机上,adb connect <插入VM的IP地址>)。如果您的应用程序没有锁定为纵向,则Kitkat Android x86版本非常出色。 - Joe Plante
请参考:http://jakewharton.com/android-needs-a-simulator/ - bryant1410

2

iPhone、iPhone模拟器、苹果笔记本和Xcode都是苹果公司的产品。

但是,Android由Google开发,Windows由Microsoft开发,Eclipse是由Eclipse供应商提供的。

这些工具来自不同的供应商,所以Android模拟器会比较慢。

我只是开个玩笑 :)


2

Apple Simulator是使用系统配置创建的,它会自动占用系统的RAM、内存和缓存,您无需进行配置。因此,iPhone模拟器并不像真正的设备一样运行。但在Android中,您必须在创建模拟器之前提供所有配置细节。Android模拟器在很大程度上会像真正的设备一样运行,但可能比iPhone模拟器慢得多。


2

是的,这是真的,模拟器(FYI)比模拟器慢。

苹果公司在iPhone模拟器方面做得很出色吗?

其他开发者无法回答这个问题,因为iOS不是开源的。

我没有设置正确吗?

不,你做得一切都是对的。


1
首先,Android没有模拟器,它有一个仿真器。 其次,我认为仿真器的速度取决于您的机器配置。配置越好,它运行得越好,前提是您已经正确创建了AVD并为其分配了足够的内存。

1

很简单:

Android模拟真实设备,因此具有真正的架构和非常接近的行为和布局。

另一方面,苹果模拟器不是一个模拟器,所以你不能期望真实的行为,但它具有接近的布局,主要解决了IOS的问题,因为你只需要一个设备来测试应用程序的行为。


0

Android SDK有模拟器,而iOS SDK有模拟工具。

模拟工具的行为类似于其他东西,但是在完全不同的方式下实现。它提供了系统的基本行为,但不一定遵守所有被模拟系统的规则。它存在的目的在于让您对某些东西的工作原理有一个大致的了解。它使用桌面资源如处理器、内存等。

模拟器是一个与其他系统完全相同并遵守被仿真系统的所有规则的系统。它实际上是另一个系统的完全复制品,包括二进制兼容的输入和输出,但操作在不同于原始仿真系统环境的环境中。

因此,与模拟器相比,模拟器肯定会更快。


0
Android模拟器实际上是一个仿真器,旨在模拟运行Android的移动设备,这意味着它模拟运行Android操作系统的硬件,使其尽可能接近100%相同。JVM将Java字节码转换为ARM指令,由仿真器解码。
iOS模拟器在更高的级别上工作,模拟操作系统及其库,将OS调用转换为OS X实现,并模拟另一方向的事件,如设备旋转或低内存条件。当您在iOS模拟器上运行应用程序时,该应用程序会编译为x86,可以在您的Mac上本地运行。与Android模拟器不同,您的iOS应用程序不会因为受限于任何特定iOS设备的内存限制而在模拟器中耗尽内存。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接