文章可能比较乱,条理不够清晰,将就看看吧,另外由于知识有限可能会有错误,欢淫指正!!
说是游戏体验,但由于本文是从系统层面分析,所以本文重点主要是说游戏的执行效率,而说到效率自然先要看看开发环境.很多人都知道iOS是基于Object-C和C/C++的传统本地开发环境.而Android是基于JAVA,很多人就会说JAVA效率低于原生语言,所以Android的程序效率一定低于iOS,这么说就太小白了.Android很早就开始支持jni调用C/C++代码开发,后来又支持纯C/C++开发.这里简单说说Android C/C++开发的历史,Android刚公布时只能用SDK也就是JAVA开发,随着游戏,编解码等高性能程序的需求增加,开发者开始抱怨JAVA效率不足,随后,谷歌便公布了NDK也就是支持C/C++语言的开发工具,但这时只能通过JAVA使用jni去调用本地语言,但随着游戏程序的进一步呼吁,终于在Android 2.3公布的时候开放了可以使用纯C/C++开发的权限,需要注意的是,这次权限完全是为了游戏开发做的改进,谷歌开放了游戏相关的API可以完全本地化访问,但其他日常API还是需要虚拟机访问,也就是还不能摆脱JAVA,谷歌也建议开发商开发一般程序时多用JAVA.说到这里,大家应该明白了,就游戏而言他们在开发语言和环境上是没有明显的孰优孰劣的.另外说一下,iOS最初的版本iPhone OS是不支持第三方应用拓展的,随着系统的更新才加入应用拓展功能.iOS的Object-C由于和iOS framework(Cocoa)绑定的特性,用Obj-C会有很多限制,所以苹果又加入了C/C++混编,也便于移植C/C++库,也使得游戏开发方便了不少.我再吐槽一下,开发游戏怎能不重视C/C++...
然后再说下系统对游戏等程序执行效率的影响.先简单介绍下两个系统,iOS是基于Darwin,是一种微内核理念的系统核心,但iOS更类似于宏内核,采用Kernel加之Shell的方式.iOS贯彻的是苹果软硬一体化的理念,苹果认为这是力求完美的最好方式,所以iOS是闭源不开放系统,只运用于苹果特定的产品上,达到高度的软硬结合和开发统一性.Android是基于Linux的开源开放操作系统,谷歌采用系统包装,OEM厂商自由定制的运营方式,由于各家都有不同的硬件配置,这导致了Android平台碎片化的缺陷,但同时也带来了Android平台多样性的特点,产品线更丰富,系统渗透广等优点.
一般来说单任务系统能使游戏这样的大型程序获得更好的运行效率,iOS和Android的情况都如何呢.iOS被称为伪多任务系统,主要是因为iOS被设计成不能后台执行程序的特点.但其实iOS也是有真正的后台任务的,苹果提供了几个开放后台的API,比如推送本身是一个常驻后台的服务进程,还有App Store下载,音乐,电话等等,第三方只能调用这些有限的后台API,当你返回菜单后,程序本身会先暂停进入缓存,一段时间后关闭,这样主要是为了控制内存消耗,而控制内存消耗和控制续航,苹果认为手机上多任务不常用到,但后台的程序却要消费不少的硬件资源和电力消耗,不如弃之不要.这方面其实Android采用了类似的机制,Android在返回桌面后程序也是暂停进入缓存,不会关闭,同样的,Android也是有完全运行在后台的进程的,不同之处在于iOS的第三方是不具备此权限,而Android的第三方开发则可以.之后需要在内存值缩小后由系统的low memory killer去决定是否关闭缓存.这样的话,Android的单任务性能乍看将和iOS相似,进入缓存的程序不再消耗性能,但这个low memory killer工作时需要占据一定的时间和资源,所以这方面iOS还是略胜一筹.不过,如果真的对单任务性能的要求很苛刻,Android 4.0开始提供了一个霸道的功能,就是完全禁止后台进程的运行,这样一来就不会进入缓存,而是直接关闭,并且自带的一些服务进程等同样会被排除在外,此时系统就能获得极端的单任务性能,不过可惜,开发者不能以此作为开发的标准,开发标准依然是默认后台机制,因为至少90%的用户还是需要Android的多任务的,不过谷歌将这个功能留给玩家自行选择还是值得称道的.
以上只是单从系统方面分析,要详细说的话游戏体验还要受硬件,厂商运营,优化等方面影像,不是三言两语能说清的,这次就先讲到这里.
BY:Crayon嘻哈小新
说是游戏体验,但由于本文是从系统层面分析,所以本文重点主要是说游戏的执行效率,而说到效率自然先要看看开发环境.很多人都知道iOS是基于Object-C和C/C++的传统本地开发环境.而Android是基于JAVA,很多人就会说JAVA效率低于原生语言,所以Android的程序效率一定低于iOS,这么说就太小白了.Android很早就开始支持jni调用C/C++代码开发,后来又支持纯C/C++开发.这里简单说说Android C/C++开发的历史,Android刚公布时只能用SDK也就是JAVA开发,随着游戏,编解码等高性能程序的需求增加,开发者开始抱怨JAVA效率不足,随后,谷歌便公布了NDK也就是支持C/C++语言的开发工具,但这时只能通过JAVA使用jni去调用本地语言,但随着游戏程序的进一步呼吁,终于在Android 2.3公布的时候开放了可以使用纯C/C++开发的权限,需要注意的是,这次权限完全是为了游戏开发做的改进,谷歌开放了游戏相关的API可以完全本地化访问,但其他日常API还是需要虚拟机访问,也就是还不能摆脱JAVA,谷歌也建议开发商开发一般程序时多用JAVA.说到这里,大家应该明白了,就游戏而言他们在开发语言和环境上是没有明显的孰优孰劣的.另外说一下,iOS最初的版本iPhone OS是不支持第三方应用拓展的,随着系统的更新才加入应用拓展功能.iOS的Object-C由于和iOS framework(Cocoa)绑定的特性,用Obj-C会有很多限制,所以苹果又加入了C/C++混编,也便于移植C/C++库,也使得游戏开发方便了不少.我再吐槽一下,开发游戏怎能不重视C/C++...
然后再说下系统对游戏等程序执行效率的影响.先简单介绍下两个系统,iOS是基于Darwin,是一种微内核理念的系统核心,但iOS更类似于宏内核,采用Kernel加之Shell的方式.iOS贯彻的是苹果软硬一体化的理念,苹果认为这是力求完美的最好方式,所以iOS是闭源不开放系统,只运用于苹果特定的产品上,达到高度的软硬结合和开发统一性.Android是基于Linux的开源开放操作系统,谷歌采用系统包装,OEM厂商自由定制的运营方式,由于各家都有不同的硬件配置,这导致了Android平台碎片化的缺陷,但同时也带来了Android平台多样性的特点,产品线更丰富,系统渗透广等优点.
一般来说单任务系统能使游戏这样的大型程序获得更好的运行效率,iOS和Android的情况都如何呢.iOS被称为伪多任务系统,主要是因为iOS被设计成不能后台执行程序的特点.但其实iOS也是有真正的后台任务的,苹果提供了几个开放后台的API,比如推送本身是一个常驻后台的服务进程,还有App Store下载,音乐,电话等等,第三方只能调用这些有限的后台API,当你返回菜单后,程序本身会先暂停进入缓存,一段时间后关闭,这样主要是为了控制内存消耗,而控制内存消耗和控制续航,苹果认为手机上多任务不常用到,但后台的程序却要消费不少的硬件资源和电力消耗,不如弃之不要.这方面其实Android采用了类似的机制,Android在返回桌面后程序也是暂停进入缓存,不会关闭,同样的,Android也是有完全运行在后台的进程的,不同之处在于iOS的第三方是不具备此权限,而Android的第三方开发则可以.之后需要在内存值缩小后由系统的low memory killer去决定是否关闭缓存.这样的话,Android的单任务性能乍看将和iOS相似,进入缓存的程序不再消耗性能,但这个low memory killer工作时需要占据一定的时间和资源,所以这方面iOS还是略胜一筹.不过,如果真的对单任务性能的要求很苛刻,Android 4.0开始提供了一个霸道的功能,就是完全禁止后台进程的运行,这样一来就不会进入缓存,而是直接关闭,并且自带的一些服务进程等同样会被排除在外,此时系统就能获得极端的单任务性能,不过可惜,开发者不能以此作为开发的标准,开发标准依然是默认后台机制,因为至少90%的用户还是需要Android的多任务的,不过谷歌将这个功能留给玩家自行选择还是值得称道的.
以上只是单从系统方面分析,要详细说的话游戏体验还要受硬件,厂商运营,优化等方面影像,不是三言两语能说清的,这次就先讲到这里.
BY:Crayon嘻哈小新
