为什么 iPhone 配置不算最高却可以保证游戏等应用流畅运用?
2014-05-04 13:30:29   来源:   浏览: 次

导读:有的安卓手机配置比 iPhone 高很多却不能做到游戏流畅。是优化的关系么? 孙大同,高中在校学生,Favor of Python, Tornad… 66 票,

有的安卓手机配置比 iPhone 高很多却不能做到游戏流畅。是优化的关系么?

孙大同,高中在校学生,Favor of Python, Tornad…

66 票,来自 TrusBe、kivikaki、张中

我来斗胆回答一下吧,其实我在这方面不是专家,只是略有了解而已。

iPhone的应用开发语言是Objective-C,编译器是gcc(感谢 @黄轶明 的指正),而这个gcc编译出来的代码又被苹果专为iOS架构优化到了极致,运行过程中也不需要虚拟机在中间插手,执行效率自然很高。

Android的绝大部分应用都是使用Java语言开发(当然也可以写C扩展,不过这是一种舍近求远的做法。而且UI部分你只能用Java来写。),Android当初这么做的确极大的降低了应用开发的难度和成本,但是由于Davlik在中间“夹了一层”,应用调用渲染类函数时性能会受到很大影响,这一点应该是最主要的。

苹果一直很注重开发者的素质,记得苹果有一篇写给开发者的指南文章,里面详细的告诉你哪些事鼓励你做,哪些事不鼓励你做,哪些事你必须这么做,哪些事禁止这么做。如果你不遵守苹果的要求,对不起,你不能上架。苹果用这种方法保证了App Store中的应用个个都是精品(当然执行效率高也包含在精品之内)

还是那一点,Android选择了Java作为开发语言,问题是程序员水平良莠不齐,谷歌的做法就是你只要敢写,我就敢让你上架。而那些随随便便写几行代码执行效率却异常低下的代码自然拖了Android的后腿。

说了半天,最根本的原因还是产品线的问题。苹果的产品数量很少,苹果可以为每一款产品,每一块CPU定制最适合它的代码,让产品的硬件性能发挥到极致。而Android产品线太广,厂商更多做的是“让系统跑起来”而不是“让系统以最高的效率跑起来”。

Android手机耗电量大也可以从类似的角度来解释,道理是一样的。

----------------------------------------

穆道元,喜欢古诗词,喜欢研究计算机

32 票,来自 李子彦、guangyi、钢盅郭子 更多

说系统架构和虚拟机的全都是老生常谈,空谈而不切实际,没到点子上。看了这么多我实在是看不下去了,简单地说几句好了。

第一点是java与objective-C的关系,这点大伙都说过,我不重复。

第二点是GPU——许多安卓ROM对GPU的支持还很烂。尤其是2.3及更老版本的系统,经我测试,许多带有大量视觉效果的游戏甚至还严重依赖于CPU的运算(比如在我的机器上,OSU和极品13,在2.3时,CPU1GHz的表现与1.7G的表现完全不同。而在4.0时,感觉不到区别。顺带一提我用的ROM,无论2.3还是4.0,在同型号里绝对是流畅度、稳定性和速度都是数一数二的,我没法证明,但请你相信。)

第三点也是目前大家还没有提到的——许多安卓用户天天在后台挂着自动杀进程的程序。安卓系统设计了许多不同的事件,程序可以在检测到触发这些事件的时候自动运行,而恰巧许多程序利用了这一点。

所以构成了——数个程序自启,被杀。再起,再被杀——这样的恶性循环,消耗大量CPU时间。

第四点也是大家还没有提到的——有许多用户特别喜欢APP2SD,然而他们却不知道他们的劣质SD卡的读写速度远远达不到要求。在加上第三点的共同作用,于是CPU和SD卡都构成了相当大的负担。

第五点,RAM“实际可用”的容量大小。许多用户没能理解安卓的内存机制,却又试图动手修改它,导致了RAM要么没法被充分利用,要么老是挤得满满的。

----------------------------------------

Yop,产品新手~

23 票,来自 贾宇敏、徐毛毛、任坤 更多

如果问题是针对 android 和 iPhone 而言,那么 @孙大同 的回答已经囊括了主要的原因。

下面补充几句:

一个重要的观点:游戏在手机上运行地顺畅,是游戏开发者的责任。

任何游戏设计者,都应该根据手机的性能,设计能在该手机上流畅运行的游戏,因为游戏运行地流畅与否,是关系到游戏体验好坏的一个重要因素。

事实上,所有的主机游戏(console game),都不可能会出现游戏不流畅到让玩家感觉不舒服的情况。

再回到iPhone和android平台上来,@孙大同 提到了两点:

一是程序执行的性质不一样

Phone是直接执行编译好的代码的,而android的如果用java,需要通过一个中间的解释过程才能运行,导致效率不高,这个是java的一个通病。

如果用词有点偏专业了可以这样理解:iPhone的拿到写着命令的纸条时,马上就可以执行了,而用java的android程序就需要拿着这纸条去问第三个人,请他翻译了之后才能执行。

关于这一点,如果游戏开发者对平台重视的话,可以一样在android平台开发除跟iPhone一样性质的程序。然而,这种方式成本较高。

关于第一点,只有在android上面的游戏是从iPhone上面的移植过来的才成立。根据上面的观点,如果是从一开始就是以android的某个机型所设计的,则不可能出现由java引起的性能问题。

二是android的开放性质和iOS的不开放性质。

所谓的开发和不开放,就是指android这个系统可以安装在各种符合要求的手机上面,而iOS则只能安装在苹果自行开发的机器上面。

结果就是android系统的设备有千千万万种,而iOS系统的设备就只有那相近的10来种。

而对于游戏开发者而言,这种结果就导致了在android上面开发,测试极其困难,因此只能在比较主流的几个机器上面测试,保证这几个机器的运行效果。这同时也就造成了其余没有经过严格测试的机型效果良莠不齐。

所以说,游戏开发者要针对android系统设计游戏,是十分困难的,只能对某几款主流机型保证运行效果。然而一当选择了针对机型,就不可能会存在运行不流畅的情况,这是设计的问题。

总结一下吧。

1)游戏开发者如果针对某几款机器型号(不是操作系统)来设计游戏,则游戏不应该出现运行不流畅的情况。

2)由于android系统开发的特性,设备过多,因而游戏开发者不可能针对所有的机器型号进行开发,因此不同机器上面运行结果各异。

3)由于android上很多游戏本身是为iPhone设计,然后才移植过来的,因此有可能在设计上无法在android的很好地运行。对于这种情况,游戏开发者可能会通过降低游戏效果来保证运行效果。