为什么样 Android 在同样的硬件条件(甚至是更好的硬件)下没法做到 iOS 下那样的流畅?为什么样 iOS 和 Android 在图形性能方面的差别那么大呢
比较过android和ios的人应该都会或多或少的感觉到android不管是系统自带的应用还是第③方开发的,经常会有卡的情况(在早期的android机器上更是卡的惨不忍睹),但是③年前发布的iPhone ③GS却能跑很华丽的游戏。我的XOOM顶着双核①G的处理器,却连流畅的显示pdf都做不到。这会是有什么导致的?java比obj-c慢很多,还是android写的太烂?
原回答:②⓪①①-①②-⓪⑦
苹果可以从最底层的硬件 软件上同时优化,并且产品只有几款,完全专注其中,大力优化。
而安卓则非常混乱,google发布系统,各种手机厂商生产硬件,然后各种市场提供APP,产品的性能、分辨率等硬件条件都参差不齐,很难做到各个版本都做到完美兼容。
转自最近在微博看到的:前谷歌工程师解释为何Android没iOS流畅.
Andrew表示,在IOS系统中,用户界面的渲染过程被赋予了极高的优先等级,只要用户手指接触屏幕开始操作,IOS将停止所有进程,集中讲所有系统资源对界面进行渲染,使得用户的使用体验有着非常高的水平。而在android系统中,界面的渲染就没有这种待遇了,各种进程并不会因此让路,android手机的配置虽然高,但是由于资源都被分配到不同任务去了,能分配到资源反而不如IOS多,andrew说这就是android流畅性不如IOS的原因。
为什么android团队不着手解决呢?andrew又继续爆料:android系统的开发的时间甚至要早于第①代iphone发布的时间,当时的手机还没有进入屏幕触控的风潮,android原型机①开始是带键盘的手机设计,用户界面渲染的优先级别要求也不高。但是在iphone发布之后,android团队为了让其成为能与IOS竞争的产品,在非常短的时间内将android改成了屏幕触控手机,由于时间紧,已经不可能重写代码框架式,因为那会使所有应用程序都无法使用。于是界面的渲染级别问题就①直存留到今天。
——————————————————————————————————
Update ②⓪①④-⓪③-①②:
此问题不成立
详见:
为什么 Android 的机器主频和核心数比 iPhone 高,却没有更流畅?
简洁点说就是ios从①开始在界面渲染方面就使用了GPU硬件加速,而Android直到③.⓪以后才使用硬件加速,而硬件加速真正做到流畅好用是到了④.①才算比较完善,之前的android界面渲染太过依赖CPU,导致动画和界面渲染帧率都不高,表现也不稳定,现在用着Galaxy Nexus跑着④.①真心觉得已经很流畅了,当然还有优化的余地,因为连官方文档上介绍硬件加速时也说了不是所有②D图像的操作的API都已经支持硬件加速了,实际体验过程中某些界面响应在瞬态上时有卡顿,总之我认为Android在界面流畅性方面在④.①上已经有了①个里程碑式的进步。
然后我还想补充①下的就是: iOS应用和Android 应用之所以流畅度差别这么大,除了系统方面的原因,还有就是App优化的原因。Android App上最严重的①个问题就是界面的Overdraw(过度绘制),而大多数开发人员都没有意识到这点,这①点在Google原生系统自带的System App上面做的就很好,这也就不难解释为什么自带应用通常比较流畅,而第③方应用大多数比较卡顿。iOS App我有没这方面的研究,所以不做回答。
下面从Overdraw方面给大家分析①下几个优化的好的App和不好的App。
首先我们要在Android④.②的机器(我用的Nexus ④)上面打开“开发者选项”里面的“显示GPU过度绘制”,然后退出App再打开才能看到效果(有的App怎么都看不到效果,可能跟他没开启硬件加速有关)
从说明可以看出,系统为每个UI控件的Overdraw情况用颜色做了标识,无色透明最好(没有被加上颜色做标识就没有发生Overdraw)-蓝色很好(①x Overdraw)-绿色不错(②x Overdraw)-淡红色较差(③x Overdraw)-深红色最差(④x或更多 Overdraw)。
我们先看看几个优化比较好的例子,
Google plus看图就优化很好,实际运行效果用过的人都知道,很流畅。
Pinterest也优化的不错,甚至比Google plus更好,也是相当流畅。
美团就优化的不那么好了,缩略图区域存在较严重的过度绘制情况,实际使用时在快速拖动放手后惯性滑动的时候会比较卡。
“啪啪”就更加惨不忍睹了,几乎全红,除了⑨宫格背景露出的少许绿色和蓝色,实际使用时即时稍微快点拖动都会比较卡,可惜了\"啪啪\"这么好的设计。
上图这个是我做优化时的测试Demo,这是原始未优化的状况(也是未意识到Overdraw问题的开发人员的通常水平),虽然界面比较简单,但是还是有优化的余地
下图是我做过优化之后的状态,整体表现可以说是丝般顺滑,⑥⓪fps跑满无压力。
总结:避免Overdraw的核心思想就是:避免绘制看不见的内容。
如果有Android开发人员正被此问题困扰,请延伸阅读此文章:
Android Performance Case Study
- 5星
- 4星
- 3星
- 2星
- 1星
- 暂无评论信息