关于 Android 和 iOS 流畅度的一切

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

之前发表了《论苹果公司的系统拖累策略》,在看了锋友的回复之后,发现无论大家是赞成或者反对,可能都对Android和iOS的认识上存在着一些盲区和误区,于是答应转载这篇专业分析两个系统的文章,以便科普。来得有些迟,还是希望各位谅解。


这篇文章对我的启发和在认识上的更新帮助都比较大,又出于我个人比较重视知识版权和劳动成果的保护,所以呢,在这里我想着重写明文章作者和出处,希望版主不要封杀:


作者:DoubleLee   出处:zealer+




-------------------------------------------------科技分割线 -------------------------------------------------



写在前面的一些话:

在纠结了很久以后,我决定开个帖子(也是我在 Zealer  的第一帖)来写 iOS 和 Android,也算是对自己近几年来学习成果的一个总结。这个话题非常大,本人虽尽我所能查证来源,但也难免会有疏漏,有的话欢迎指出。   :)

如果觉得概念太多看不下去就直接看加粗部分就够了。

我希望大家读完我的这篇帖子后,是这样的:

而不是:
       我们应该为这个世界的多样性而感到庆幸,不是么?

一、什么是流畅?什么是卡顿?
如果我们讨论流畅和卡是建立在不同的标准上,一定会变成毫无意义的口水战。在这里,流畅我们定义为运行程序时达到 60fps 或以上的绘制效率,且尽可能少丢帧。卡顿我们定义为程序运行时无法达到 60fps,丢帧频繁。

二、Apple 和 Android阵营 比是不是能带来更流畅的应用体验?
不是。两者都非常顺滑,用久了也都不卡顿。Android 定义为 带有GMS推送的,带有良好 Android 应用生态圈的(包括少数国内优秀应用),具有Google Play 服务的 Android 手机,拥有健康使用习惯的 Android。包括但不限于Nexus,Moto,SONY,LG,htc,Samsung 在没有封杀Google的市场的使用体验。

三、Apple 和 安卓阵营 比是不是能带来更流畅的应用体验?
1.是。安卓(尤其是用久了)很可能会卡顿。安卓 定义为 不带GMS推送的,缺失良好 Android 应用生态的,不具有 Google Play 服务的,基于各种“深度优化,深度定制,世界第一,跑分天王,etc.” 家,配合 “动不动就管家卫士全家桶,清理内存释放手机速度,打败全国百分之XX” 的用户的 安卓生态。

四、Apple 和 Android阵营 硬件对比
Apple 硬件处于一个什么样的水平?足够优秀的水平,Apple是著名的硬件狂魔,并不是大家想的iPhone硬件远远不及Android阵营。

1、Android 阵营目前的旗舰 Soc 之一 是基于 高通810 的解决方案(MTK 和 三星,华为 的解决方案不是很了解,欢迎补充。当然业界一般认为是三星的CPU 14nm制程更先进,所以功耗发热的表现较810更好。),它拥有 8 个 CPU核心,20nm制程,主频高达 2 GHz。810纯CPU计算能力,并发计算能力优于 A8。但它频率高,核心多,功耗和发热量在密集计算时也会远高于A8,发热会限制 810 的发挥。

2、CPU Cache 方面: A8非常慷慨地配备了高达 64KB 64KB的L1 Cache,1MB L2 Cache和4MB L3 Cache,与上一代 A7 相同,810 数据不明。但实际应用来看,似乎 810 配备的 Cache 喂不饱 8个核心,存在 Cache Miss 的情况。(有硬件信息的朋友欢迎补充)但是,即使没有准确数据的情况下,有一件事情也是可以确定的,那就是 Cache per Core数据 810 绝对不如 A8。如果要做到一样的水平,那么 810 要配备 128kb L1 Cache,4MB L2 Cache,16MB L3 Cache。要知道的是,这么多的 Cache 即使是对于 Intel Core i7 也是很奢侈的。而如果假设 810和A8配备了一样的Cache,810 的 Cache per Core 数据就很难看了。要知道,CPU Cache 的速度远高于 RAM 的速度,所以小 Cache 带来的情况就是 外围 I/O 经常处于等待状态,延迟了 CPU 计算能力的发挥。打个比方,你拿跑车引擎配个4速变速箱,引擎的能力就无法发挥了。Cache 方面,A8 表现优于 810。

3、GPU 方面,A8配备的 PowerVR Series 6XT GX6450 运算能力是 136.4 Gflops(533MHz)/153.6 GFlops(600MHz),稍微优于 801 配备的 Adreno 330 ,Adreno 430 则是 324~388.8 GHz(600MHz)【水冷……】。毕竟当时高通设计810的时候就是用来拖 4k的,图形性能 Adreno 430 数据上远优于 GX6450,但是 GX6450 带 1334*750 相当于 801带720p,带 1920*1080 分辨率性能也足够充裕。

4、晶体管数量,丧心病狂的A8堆了20亿个晶体管(包括Cache,GPU,dsp),已经赶上810 所有8个核的总晶体管数量了。带来了A8极其凶残的单核性能。810 单核性能弱于 A8。

五、系统与运行机制层面
(一)内核
1、又要开始拿Linux 和Unix 说事了,但很不幸的是,流畅这件事跟系统内核一点关系都没有。

2、说个老梗:
·   iOS 基于Unix所以是Touch(响应触摸操作)——Media——Service——Core 架构
·   Android基于Linux所以是Application——Framework——Library(包含了响应触摸操作的显示相关)——Kernal架构
·   所以iOS 要比 Android 响应的快,所以iOS更流畅 云云
·   然而这个东西是2.x时代的,Google早就改掉了……我也不知道这种 Unix 内核性能优于 Linux 的论调为什么时不时还会冒出来……反正两者都不是实时操作系统(RTOS)。

(二)运行时(Runtime)
1、Android 基于Java 虚拟机,前段时间还因为这个Google和甲骨文吵上了法庭。算了回归正题,我们主要要说的运行时有 Dalvik 和 ART(Android Runtime)两种,Dalvik 是 Android 于Android 4.4之前所使用的默认 Runtime,ART 则是 Android Runtime,是在 4.4 时引入的一种新的运行时,在 L及以上版本取代 Dalvik成为默认运行时,在GC机制、JNI和Stack size上都与dalvik有着很大的不同。Dalvik 属于 JIT(Jusi-in-time)编译器,ART属于AOT(Ahead-of-time)编译器。反正说了这么多你们只需要知道ART可以直接调用底层效率更高就对了。
·   其实是贴主 <编译原理> 还没啃熟你们不要打我嘤嘤嘤,有兴趣的自己去看这两个链接
·   http://**/maz6uaq
·   http://**/nepu7vk

2、iOS 不开源,但是可以知道的是它的Object-C编译器属于GCC编译套装的一部分(感谢 @InflationAaron 指出:后期应该是转向了苹果主导的 LLVM 编译器)。

(三)渲染流水线
1、Android 3.0引入了应用端绘图的GPU加速(Hardware Canvas),Android 4.1 引入了黄油计划(Project Butter),到4.1 可以说Android的渲染机制已经足够优秀,只要按Design Guideline写是轻松让过渡动画达到60fps的。黄油计划包括了:
·   窗口三重缓冲机制(降低连续丢帧可能性)
·   垂直同步机制(减小应用端开始绘制到实际屏幕更新的延迟)
·   GL窗口缓存绘图命令的异步执行(减少应用主线程的阻塞)

但很明显Google还不满足,于是在Android L 引入了独立的GPU线程,并允许主线程和GPU线程并发。也就是说GPU线程在绘制第N帧的Display List时,主线程已经可以同时生成第N 1帧的Display List,并且允许GPU调用不同参数绘制同一个Display List,简单的说就是提高了绘制过渡动画的效率。

这里说一个 Google 的黑科技,Project Sky - Dart on Android,完全脱离Java的一套东西,他们的目标是把渲染时间压缩到8ms以内,也就是等效120fps。但他们现在做出的Demo里每帧平均渲染时间是1.2ms/f,也就是等效惊人的 833fps……

2、iOS不开源……(又来了)但是,我们仍然可以推测他的渲染流水线和WebKit类似,因为WebKit存在大量Apple的参与代码。

3、总而言之,你们只需要知道Android和iOS是different but not better than each other就行了。只是在实现路线上有所不同,但实际上到最后都异曲同工。Google的Project Sky性能惊人,实际应用有待观查。

六、应用,ROM(Android)以及其它
(一)This might be the most tedious part.

(二)应用,讲到这里就不想讲了,算了,还是讲一下吧:
1、BAT
·   Baidu,alibaba,tencent,号称Android流畅度三大杀手
·   这些大公司用户太多太多了,导致他们必须兼容低版本的Android,无法利用新的API,导致卡顿:
(1)QQ,节奏大师,Android 2.2,API level 8
(2)QQ浏览器,UC浏览器,Android 2.3,API level 9
(3)闲鱼,支付宝,淘宝,百度,Android 4.0,API level 14
(4)微信,Android 4.0.3,API level 15

·   发现什么问题了没有?引入黄油计划的Android版本是4.1,所以60fps……
·   然后QQ和节奏大师你们这还抱着冻酸奶的态度令我感动……以及浏览器们都和姜饼暧昧不清……唉,连GPU加速都……
·   然后如果打开开发者选项里面的show GPU overdraw(虽然不一定是GPU绘制的),你们就会发现各种严重的overdraw,尤其是阿里巴巴系列的应用,整个页面滥用Webview,导致了严重的重复绘制。
·   BAT经常大量使用自制控件进一步加剧了对资源的使用。
·   假如有第三方客户端的话,其实往往有非常优秀的遵守Design Guideline的应用,比如新浪微博的第三方客户端们,四次元,Fuubo,Smooth等等。

2、GCM,与那些推送的事情

·   GCM就是Google Cloud Messaging,是Google自家的推送服务,也是绝大多数 Android 应用的推送服务。使用这个服务,利用的是Google服务器统一推送,可以带来及时,省电,后台不唤醒的推送体验。
·   APNs 就是Apple Push Notification Service,Apple的推送服务,与GCM类似,可以带来良好的体验,且是iOS上唯一的推送机制。
·   然而由于某堵墙的存在,国内并没有办法体验到GCM推送带来的推送体验。所以部分手机厂商就开始做自己的推送机制,比如小米做的对齐唤醒和 MiPush,但是只对MIUI及兼容的部分应用有用
·   剩下的就是其它诸多推送了,BAT自家的推送机制,极光,蝴蝶云,智游,个推等等。假如很不幸的,你的手机上安装了BAT全套,又安装了带各种不同推送提供商的应用,那就等着感人的耗电,内存占用与无数的后台唤醒吧……

3、优化
·   很不幸的是,到现在,两个平台都仍然有大量的应用跑在单核单线程上,对双核,多核以及64位的利用非常之低,甚至没有。这个时候A8较高的单核性能能带来更好的体验。但如果应用对多核做好了适配的话,在Android上流畅性是可以花样吊打iOS的。

4、流媒体视频
·   Android在这方面流畅度要好于iOS
(1)Android支持传统流媒体格式,可以用已经成熟的CDN
(2)iOS需要使用TS流,需要额外准备CDN线路,部分线路支持还不佳
(3)Android 4.0后使用HLS协议并且实现P2P

5、 总结一下,Android流媒体性能较好,BAT是流畅度杀手,国内混乱的推送有锅。

(三)ROM
1、iOS并不存在这个问题,不讲。
2、Android存在的问题是,有太多厂商太多版本的ROM了,每个厂商都对底层做些修改。所以简而言之就是闹心,负分优化大家见得多了我就不说了。
·   PS:知道为什么国内定制越深度的ROM适配Android L越慢吗?就是因为底层的东西改得太多5.0把运行时改了工程量很大难以在保证功能健全的情况下快速适配。
3、驱动(不是很懂,希望补充)

七、最后我们来说说设计
1、iOS 的人机交互设计还是很值得称道的,毕竟是带领我们进入了Multi Touch时代,从iOS 6的拟物到iOS 7/8/9的扁平 高斯模糊毛玻璃为代表的设计路线,都可以说是一套非常值得令人尊重的设计方案。它是比较早把流畅的动画引入设计语言的一个方案,也在长期的验证中逐渐发展成熟。

2、以Holo Theme为代表的Android Design,进化出了Material Design,对整个UI的把控能力达到了一个非常高的水准。阴影,涟漪波纹,Z轴等等,都显示出Google对细节一丝不苟的把控,且这套UI比较好的解决了桌面,网页,移动端的交互统一性。
这个以后我会专门开一个帖子来写。

八、总结
1、总之,对比下来我们会发现,两种生态在健康的情况下其实软硬技术实力都是处在同一水平线上的,互有长短。硬件Apple并没有弱于Android,更谈不上软件的神优化。但是,如果Android没有Google Services,就相当于失去了Android的灵魂,失去了Google Play的优秀资源,失去了GCM推送带来的流畅省电,失去了Google Cloud在内的很多很多核心竞争力。Android不卡,安卓会卡,本质不是系统的问题,而是什么样的环境,用户着什么样的程序。

2、iPhone就好像是一辆F1方程式赛车,里里外外都精心设计过。看起来只有1.6L的排量,但实际上却是一颗上千马力的心脏,但这也决定了他只能在专门设计的方程式赛道上跑,而且跑的很欢。一旦脱离赛道(越狱),就各种不安全。

3、Android则好像是各种其它跑车,硬件的定制化程度极高,既有入门级的现代Coupe,尚酷R,也有比肩F1的布加迪威航,法拉利,兰博基尼,更有小众的科林赛格,优雅的玛莎拉蒂等等……如果再适合他们的路况上跑,就算是入门级,轻松破200km/h也不是什么难事,即使无法比肩F1,也足够体验驾驶乐趣,旗舰则可以和F1全面硬抗,弯道,直道,加速,都能争个高下,甚至还可以玩一些F1做不到的事情,比如弹射起步,漂移等等。

4、安卓则是……则是几个改装厂把这些跑车们自行改装,有的厂商改的好,有的改成渣,拉到了坑洼不平的土路上,还时不时来点路障,这就算起步跑得溜,但久了对整车肯定不好。

感谢大家的阅读。
以上。
8月7日 23:10

转载于:https://my.oschina.net/weichou/blog/547674

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/262316.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Extjs4 MVC 添加view层

如果这不是您感兴趣或者需要学习的东西&#xff0c;何必点开呢&#xff1f;人生苦短。实例中我们通过view层望主界面中添加一个grid&#xff0c; 1、app.js改成如下&#xff1a; app.js 1 Ext.Loader.setConfig({enabled:true});//开启动态加载2 Ext.application({3 name: …

剪映电脑版_2020 年双十一要不要选一个平板电脑?

其实大路很久以前就一直在关注平板电脑&#xff0c;我记得前几年平板电脑有好多厂家都在做&#xff0c;比如小米的红米平板&#xff0c;1000元左右&#xff0c;性能像手机一样&#xff0c;非常香。华为也有很多&#xff0c;但是今年我突然想买的时候&#xff0c;尼玛停产的停产…

Qt之自定义搜索框

简述 关于搜索框&#xff0c;大家都经常接触。例如&#xff1a;浏览器搜索、Windows资源管理器搜索等。 当然&#xff0c;这些对于Qt实现来说毫无压力&#xff0c;只要思路清晰&#xff0c;分分钟搞定。 方案一&#xff1a;调用QLineEdit现有接口 void addAction(QAction * act…

跟我学Windows7的33个技巧(二)

18. 自定义电源开关 默认情况下&#xff0c;Windows 7在开始菜单处将以文本形式显示关机按钮&#xff0c;但是你只需要几秒钟就可以将这种默认的方式改变。如果每天你都需要重启电脑许多次&#xff0c;那么这样的改变比默认的方式更加有趣&#xff0c;右击开始菜单选择属性“Pr…

android gps 锁屏更新坐标_把手机锁屏设置成任意字体,悄悄给男(女)朋友一个惊喜吧...

有好软件就要与大家分享&#xff0c;我是阿喵&#xff0c;阿喵每天会定时推送出安卓手机、苹果手机、电脑相关、学习等优质软件&#xff0c;如果各位觉得软件不错&#xff0c;就请转发评论&#xff0c;留言需要什么样功能的&#xff0c;留言需要什么样功能的&#xff0c;阿喵定…

实验一:SQL server 2005高可用性之----日志传送

如转载&#xff0c;请注明出处&#xff1a;http://blog.csdn.net/robinson_0612/archive/2009/10/31/4751070.aspx SQL server 2005高可用性之日志传送是在SQL server 2000 日志传送基础之上的延续&#xff0c;两者其本质上并没有太大的差异。日志传送能够同步位于不同服务器或…

反向代理服务器

一 反向代理服务器简介      反向代理&#xff08;Reverse Proxy&#xff09;方式是指以代理服务器来接受Internet上的连接请求&#xff0c;然后将请求转发给内部网络上的服务器&#xff1b;并将从服务器上得到的结果返回给Internet上请求连接的客户端&#xff0c;此时代…

location 拦截所有_让它帮你干掉所有流氓软件,还你一个清静系统

最近大家应该都要复工了吧&#xff01;我们又到了捧着电脑跑来跑去的日子&#xff0c;不过相比在家&#xff0c;复工还是蛮激动的。今天队长聊一下电脑软件。电脑这种东西&#xff0c;现在虽算不上是生命之源&#xff0c;但是复工上班工作或者交作业的时候那可真是当祖宗供着的…

grub4dos和winsetupfromusb1.4

其实grub4dos也是一个多系统启动盘制作软件&#xff0c;GRUB4DOS 最大的成功之处就是既学习了windows的方便易用&#xff0c;又引入linux的强大功能。http://baike.baidu.com/link?urlvFkYDEOTmdnw0dLueYeNz0V48egdnjpHczS3YwWiSsXtM7krYaE6KiDohCT4hlo5-LihtQU7fYhXuURazx_OK…

一份完整的问卷模板_一份完整市场推广策划方案模板

完整的市场方案主要分为以下几大板块&#xff0c;在策略撰写的过程中&#xff0c;依据策略优先级按照以下三个步骤划分&#xff0c;前后承接。为避免无用功&#xff0c;尽量确定前一部分后&#xff0c;再开始后一部分&#xff01;方案目录&#xff0c;记住这个&#xff01;整个…

Application是什么

2019独角兽企业重金招聘Python工程师标准>>> 1:Application是什么&#xff1f; Application和Activity,Service一样,是android框架的一个系统组件&#xff0c;当android程序启动时系统会创建一个 application对象&#xff0c;用来存储系统的一些信息。通常我们是不需…

linux mysql udf打包_Linux下MySQL 5.1编写UDF 并运行(Install)获取当前时间的毫秒数...

Mysql 无法获取当前时间的毫秒数自行定制UDF&#xff0c;以提供current_ms方法1. 编写 C 文件#ifdef STANDARD#include lt;stdio.hgt;#incMysql 无法获取当前时间的毫秒数自行定制UDF&#xff0c;以提供current_ms方法1. 编写 C 文件#ifdef STANDARD#include #include #ifdef _…

Daily Scrum 2012/11/08

TeamSH-IT 今天经完成了之前在数据定义存在一些问题。sui老师经过小组之间的交流&#xff0c;完成了对数据定义的最终版。周末将进行初步的整合和测试。 详细的完成情况&#xff1a; 组员今天任务明天任务Hu Renjun 任务213 整合各个模块功能 完成完整的数据流过程 任务213 …

部分不能激活Win 7 的问题分析和解决方案

前言 总所周知&#xff0c;目前Win7的激活程序多如牛毛&#xff0c;但总有些朋友的机器就是激活不了&#xff0c;以至于要刷BIOS等高危操作。 本文通过对Win7激活程序的原理分析&#xff0c;介绍一种能够解决大部分OEM版系统激活Win7的方法&#xff0c;希望能够帮助需要的朋友…

MFC字体

GDI字体分3类&#xff1a;点阵字体&#xff08;raster font&#xff09;、笔画字体&#xff08;stroke font&#xff09;和Truetype字体。 默认点阵字体有7种&#xff1a; System &#xff08;用于SYSTEM_FONT&#xff09; 无衬线 西方 有衬线 gb2312…

decimal double java_Java BigDecimal和double BigDecimal类

BigDecimal类对于不需要任何准确计算精度的数字可以直接使用float或double&#xff0c;但是如果需要精确计算的结果&#xff0c;则必须使用BigDecimal类&#xff0c;而且使用BigDecimal类也可以进行大数的操作。BigDecimal类的常用方法如表11-15所示。表11-15 BigDecimal类的常…

分享45套2011年和2012年的高质量免费网站模板

日期&#xff1a;2012-11-11 来源&#xff1a;GBin1.com 前端时间我们分享了12套超酷的后台管理员界面网站模板&#xff0c;相信看过的朋友肯定已收入囊中了&#xff0c;今天呢&#xff0c;我们继续推荐45套高质量的免费网站模版&#xff0c;相信如果需要自己搭建网站的朋友肯…

水晶报表中对某一栏位值进行处理_【节能学院】能耗管理系统在某超市嘉兴店二期工程的设计与应用...

摘要&#xff1a;随着社会生活水平的提高&#xff0c;经济的繁荣发展&#xff0c;人们对能源的需求逐渐增长&#xff0c;由此带来的能源危机日益严重。学校建筑如何实时的了解、分析和控制学校的能源消耗已成为需要解决的迫在眉睫的难题。传统的能源消耗智能以月/季度/年为周期…

python数据分析天气预报论文_用python+sklearn(机器学习)实现天气预报数据 模型和使用...

项目地址系列教程0.前言在上一篇教程里我们已经获取了所需要的全部数据&#xff0c;包括训练数据集和测试数据集&#xff0c;使用ProcessData()调用&#xff0c;所以接下来写模型的建立和预测1.建立模型没段代码在文章后面都会整合成一段&#xff0c;分段展示只是便于阅读a.准备…

偶然在网上看到的题目,jQuery功底如何一测便知晓!!!!!!

笔者最终实现的效果如下&#xff1a;    参考答案下载地址 通过手写html代码实现如图效果&#xff1a;以下题目全部使用jQuery来做 当点击“加载数据”按钮时根据提供的数据通过jQuery动态创建表格数据填充该表格。数据见data.txt文件。效果如图&#xff1a; 当点击“设置样…