左转科技

总说iPhone运行流畅不卡,Android就很卡?总说iPhone运行流畅不卡,Android就很卡?

左转科技 1

  [杂谈]买手机时,最常听到的建议是,有钱就买苹果吧,用几年都不会卡。所以即便是苹果新款手机卖出超出市面上绝大部分手机近一倍的价格,依旧有许多消费者会为之买单。因为他们相信,苹果的手机能用上更长的时间而且拥有绝佳的体验。

  事实上,的确是如此,尽管安卓旗舰的配置和体验越来越好,但苹果似乎还是维持着在手机界的霸主地位。本篇文章就为大家讲述iOS为什么能做到持久不卡而Android却频繁卡机。

全面屏手势——“更流畅的动画效果”

  iOS的设计和体验一直是有口皆碑的,特别在iPhone X之后的全面屏手势体验上,目前来说,还没有安卓的手机能完完整整做到iOS12上全局手势上的跟手度,而系统各处的动画效果比如打开控制中心、在多任务处理时进行轻扫,或在 app 中滚动浏览,这些操作都会更流畅、更灵敏。

  Android尽管拥有各种各样的快捷操作、自定义手势,全面屏手势,动画效果,但整体上的视觉效果并比不上iOS带给用户的流畅、完整、跟手。所以第一印象很容易会给消费者带来Android手机比不上苹果手机流畅的感觉。而事实上,造成这种现象的原因源于很多底层的原因,下文一一细说。

流程更简短,优先响应级别

  当我们使用iPhone或者是Android的智能手机时,第一步就是从锁屏解锁进入到桌面,然后找到需要使用的APP点击进入。

  这是绝大部分人使用手机时候的基础操作,这个时候iOS系统就表现出来了流畅的一面,但Android产品却经常给人一种卡顿的现象,特别是后期使用手机时候点开的软件多了的时候,Android就远远不如iOS流畅。这是为什么呢?

  这与两个系统的响应优先级有关,iOS对屏幕反应的优先级是最高的,它的响应顺序依次为Touch>Media>Service>Core架构,简单说当用户触摸屏幕之后,系统就会最高优先去处理屏幕显示,也就是触摸(Touch)这个层级,然后才是媒体(Media),服务(Service)以及Core架构。

  而Android系统的优先级响应层级则是 Application>Framework>Library>Kernal架构,和显示相关的图形图像处理这一部分属于Library。也就是说当你触摸屏幕之后,Android系统首先会激活应用,调用框架然后才是屏幕最后是核心架构。

  所以iOS能让人从上手就感受到跟手,流畅,因为iOS从一开始开发就是为触摸屏幕交互所设计,而Android则不同,Android的设计初衷是为了软件APP而开发。不过优先级对系统流畅性是有影响不假,但这并不是最主要的原因,造成两系统之间流畅性不一的现象还有其它因素,我们可以接着往下看。

硬件加速

  如果说从系统底层优先级响应上,iOS已然做到了为流畅而生,那么在硬件上,iPhone也与Android手机不同。iOS系统对图形的各种特效处理基本上都是基于专用的GPU硬件进行加速的,它可以不用完全借助CPU,而是通过GPU进行渲染以达到更流畅的操控表现。

  而Android则不是如此,一方面原因是Android需要适配不同硬件以满足各种差异配置,一方面Android的设计逻辑并不是为了触控服务。当然,在Android 4之后的系统版本中,都默认开启使用GPU硬件进行加速渲染,但依旧无法做到所有特效全部都靠GPU进行加速。

  屏幕最先响应的优先级关系再加上iSO本身GPU加速程序的特性,使得用户在操控过程中感觉iOS手机拥有着超高的流畅性和舒适度。因为iOS本身的整个设计流程都是在为最大化的流畅做服务,不管是第一印象的滑动触摸屏幕,还是你进一步使用程序时的操作都是如此。最后加上GPU加速这点特性,使得iOS能软硬件结合,使系统流畅性达到Android手机望尘莫及的高度。

后台机制

  如果说iOS在触摸屏幕上做到软硬结合已然不错,但iOS与Andorid在软件运行时的流畅度不同,则是因为另一个明显的区别:后台机制。

  iOS采用的后台机制,当用户按HOME键(主页键)退出应用时,iOS其实关闭了该应用,只保留应用的图像入口,并默认将应用的最后运行数据记录在RAM中,当再次打开应用时,系统就会把之前保持的最后运行数据还原到应用中,此时应用还原了之前的状态,给用户一种应用会在后台运行的错觉。

  那么为什么iOS中被杀死的应用也能收到推送消息呢?因为用户从应用中选择了开启推送后,iOS系统会增加几个进程,这几个进程会从苹果的服务器接收信息,然后再通过该服务器发给用户,苹果服务器在其中就起到了中转的作用。正是因为有了这一系列的机制,所以即便iPhone的“表面”配置RAM比安卓手机低,但是iOS还是会给人更加流畅的感觉。

  而Android则不同,Android采用的后台机制,将应用保留在RAM中,当用户按主页键返回桌面或者退出程序时,程序实际上并没有完全退出,而是被系统挂在了后台。这就是为什么Android即便关掉了聊天软件,依然能收到消息通知,因为它是常驻系统内存的,包括平时收到的垃圾广告推送,也是因为后台程序在运行。

  这机制直接导致从内存使用上来看,Android刚开机时内存使用很低,正常使用一天,如果不进行清理内存操作,内存占用就会越来越高,导致Android系统的流畅度降低,最直观的感受就是卡慢。所以安卓机器需要更大的RAM,来提升用户体验;

开发机制不同

  iOS的编程语言是 Objective-C,使用编译器GCC,而GCC编译出来的代码又被iOS架构优化到了极致,运行过程中不需要虚拟机在中间插手,执行效率非常高。而且GCC使用内存是自己分配和回收的,简单说就是当GCC要操纵指针,使用完内存,当时就释放了。这导致了ios的内存使用率并不是特别高。所以iOS并不需要特别大的内存。

  Android的编程语言是Java。Java的内存管理是通过jvm,jvm是后台管理内存,不需要程序关注内存。达到一定的内存占用量会触发gc,gc会stop the world,把用户线程停止掉。因此可能会影响两方面,第一在gc的时候卡顿,特别是长gc。长的可能达到几秒甚至几分钟。

  第二,Android本身不是为触摸屏打造的,安卓所有的应用都是运行在一个虚拟的环境中,由底层传输数据到虚拟机中,再由虚拟机传递给用户UI,任何程序都可以轻松访问其他程序文件。同时gc是后置的,内存占用达到一定程度才回收内存,这导致了Android的内存使用率很高。当然,谷歌也意识到了这一点,所以在Android 4.0系统版本之后的版本,编程语言和机制已经被Android进行了改善,卡顿现象明显降低了。

应用开发,封闭式的App Store

  App Store是iPhone和iOS一个极为重要的标志,App Store不仅为苹果实现了软件上的盈利,更为iOS中的应用设置了一个标准要求,让每一个应用程序一年都只适配一种最多两种CPU,极大的提高了硬件利用效率和软件开发速度。

  而Android则不同,安卓是开源的,开放的,而且安卓是基于Linux内核和多线程的开发平台,开发成本低。此外,Android没有像iOS一样的全封闭式App Store,给开发人员相当高的开发自由度,并且还兼容各种各样的硬件,让软件从此可以天马行空不受拘束。

  iOS和Android的应用开发各有特点,但也正是这些特点使Android也饱受“流氓”软件的迫害,使得系统的流畅和整洁度远远比不上iOS。当然,Android系统里也有很多良心软件,在可见的未来,Android系统对软件的规范也会越来越强,对“流氓”软件的查杀也会一再改进。

iPhone越升越卡?Android越用越卡?

  其实苹果手机也不是永远不卡的,简单来说,iPhone卡顿有两个原因:第一种硬件太差,水平跟不上,说的就是已经发布了多年的手机,对比当前性能差太远,所以使用会有所卡顿;第二种就系统又更新了。升级最新的iOS系统会给手机运行带来一定的压力,特别是已经发布多年的iPhone。

  Android越用越卡的原因除了是开发机制问题,更多的是APP造成的,主要是因为占用内存、优化不足、流氓软件影响。既然是APP的问题,最终的解决方法就是尽量下载规范一点的APP,避免一些流氓软件内置的互相唤醒、自启、消息等权限。

总结

  响应级别、硬件加速、后台机制、开发机制和应用开发等不同的缘故,造成了以前一直到现在iOS比Android系统更为流畅的现象。安卓很多手机在不清理后台,硬件未更新的情况下,几乎都会遭遇卡顿的体验,尤其是打开软件加载资源时,在打开比较大的游戏时,多应用切换时,或多或少的都会遇到卡顿甚至是重新加载应用的状况。

  但好在硬件配置反超iPhone一大截的今天,Android手机在软件运行流畅度和美观上已经拥有着不弱于iOS的体验,特别是在Android O之后,谷歌也意识到了系统流畅度对体验的提升,也在逐步的改进系统UI的设计。而国内对于Android深度定制的各家UI,也同时拥有着基于Android的便捷操作和不差于iOS的美观设计。

  未来,在改进了系统设计和拥有了强大硬件后的Android,必定是撼动iOS的霸主地位的唯一骑士。目前,iOS依旧是最为流畅和优秀的手机系统。