您的位置:首页 > 移动开发 > IOS开发

漫谈安卓和ios,mac os x

2016-07-04 00:00 309 查看
为什么安卓机普遍卡,普遍慢?
可以先参考一下这篇文章
而我认为这篇文章疏忽了一点,那就是安卓的应用层和虚拟机。
首先我们来看看安卓系统的架构图


它的最底层是linux内核,而它的应用层却是要用java来做,而java的特性就是跨平台,“一次编译,处处运行”,java跨平台的原理


看到了吗?它跨平台的原因是因为它内置了一个“虚拟机”!!!它先用一个“编译器”把JAVA代码编译成“字节码”,然后虚拟机再负责把这些字节码解释,翻译给CPU听,这就相当于你所有的软件都是跑在一台虚拟的电脑上的!而在性能比手机更强劲的PC上,你跑一个虚拟机看看资源的占用,hehe。
这就是为什么安卓手机普遍卡慢的另一个重要原因。
我们再来看看ios/mac os x的架构

虽然是mac os x,但也和ios八九不离十。
mac os x(以下简称x)系统的架构的最底层则是unix系的freebsd作为内核,另和mach内核混合(mach兼容posix标准,而freebsd则是unix另一支正朔,所以称x为unix-like并无不妥)的darwin内核

而x的应用层实现却是用c/objective-c/swift纯编译性语言实现,效率自然高出不少。
话又说回来了,为什么同样可以跨平台,为什么安卓不用c做应用层???而是选择了java???要知道C也是同样可以跨平台的啊!
C的跨平台方式是“一次编写,处处编译。”而java刚才说过是“一次编译,处处运行”。C语言的编译方式是“C语言代码先经过预处理,然后编译成汇编语言,然后再从汇编编译成二进制文件,然后再由二进制文件链接生成可执行文件”。那么问题来了,安卓操作系统是面向嵌入式设备的,不光是给手机,还要给机顶盒,平板,上网本,电视机,飞行器,路由器网关,智能家居balabala一大堆设备用,这么多设备,即便都是arm,也未必是同一个公司的芯片,这么多硬件平台,如果用C语言做APP,那就真得跟x一样分为“iphone版”和“ipad版”,而且你以为这就完了?不!同样的程序从手机编译移植到ipad,能不能用还不一定!还得去重新测试,去维护......这都是人力啊,这都是物力啊,这都是财力啊!而安卓的“一次编译,处处运行”的方式,编译生成的.apk包我可以同时给平板和智能手机用!而大多数情况不会出错(避免了依赖硬件,因为运行在虚拟机上)!这样给公司节省了多少人力物力?
反观ios平台,ipad版上废弃了不少工程,不少公司为了兼顾ipad和iphone不得不两头跑,甚至开启两个项目组分头维护,更多公司更是“只有iphone,没有ipad”也是让人无语到不行,但是要做跨平台就要浪费更多的人力物力。然而硬件依赖方面,做ios系统的厂商目前只有apple一家,所有的设备包括ipad,iphone,iwatch,机顶盒硬件标准都是统一的,这个问题就没有安卓那么严重,安卓光手机一块就有多少厂家在做?每家硬件平台都不一样,如果拿C实现应用层,最后又要跟unix世界一样打的分崩离析,相同的程序在这家安卓机上没问题在另一家就出问题,再找一家压根跑不起来。。。。
2333333.。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: