本文从开发者的角度来剖析为什么Android的机器配置逐渐变好,但性能仍然没有iOS的好。我认为可以从下面几个方向解读。
1. 理念不同
Android 提倡同时跑多个应用,允许后台跑多个Service,最大限度的使用CPU、内存等资源。
iOS 强调同一时间只干一件事情, 不提倡跑多个Service。应用压入后台会被杀掉。
2. 语言不同
Android是Java来实现的, 需要虚拟机。 Java 语言经过虚拟机的编译变为Class文件,虽然针对Android进行了优化(把Class包裹成dex文件),但仍然是在虚拟机中运行的,所以性能肯定会受到影响。
iOS 是类C语言, 编译后的代码都直接变为机器码。 系统直接执行机器码,效率肯定超过Android。
当然随着Android的发展, 也引入了ART的虚拟机。性能也有长足进步。
针对ART虚拟机来看, 他也是尽快得到机器码的方式,跟iOS异曲同工。
垃圾回收机制不同也严重影响了性能。 Java虚拟机提供垃圾回收算法,为了保证功能,需要不停的去进行GC,而iOS完全交由代码来控制垃圾释放。性能当然会好很多。
3. UI层的响应优先级不同
iOS对屏幕反应的优先级是最高的,它的响应顺序依次为Touch--Media--Service--Core架构,换句话说当用户只要触摸接触了屏幕之后,系统就会最优先去处理屏幕显示也就是Touch这个层级,然后才是媒体(Media),服务(Service)以及Core架构。而Android系统的优先级响应层级则是Application--Framework--Library--Kernal架构,和显示相关的图形图像处理这一部分属于Library,你可以看到到第三位才是它,当你触摸屏幕之后Android系统首先会激活应用,框架然后才是屏幕最后是核心架构。
可以看到优先级的不同导致了iOS产品以及Android手机在操控过程中的表现差异,当你滑动屏幕进行操控的时候,iOS系统会优先处理Touch层级,而Android系统则是第三个才响应Library层级,这是造成它们流畅度不同的因素之一。不过优先级对系统流畅性有有影响不假,但并不是最绝对的,造成两系统之间流畅性不一的现象还有其它因素,我们可以接着往下看。
4. 硬件适配不同(GPU)
iOS系统对图形的各种特效处理基本上正好都是基于GPU硬件进行加速的,它可以不用完全借助CPU或者程序本身,而是通过GPU进行渲染以达到更流畅的操控表现。但是Android系统产品则并非如此,因为Android需要适应不同的手机硬件,需要满足各种差异配置,所以很多图形特效大多都要靠程序本身进行加速和渲染,并严重依赖CPU运算的操作自然会加大处理器的负荷,从而出现卡顿的问题。虽然Android 4.0以及4.1等更高版本中进行了改进将硬件加速设为默认开启,但依旧无法做到所有特效全部都靠GPU进行加速。在很多Android手机里面都自带有“是否开启GPU渲染”这个功能选项,不过开启之后的改善也是微乎其微。