Android

虽然很多 Android 手机的配置都比 iPhone 要高,比如大多数 Andorid 手机的内存都有 1GB,而 iPhone 4S 只有 512MB 内存,但用过 iPhone 的人都知道 Android 手机在使用的时候总感觉没有那么顺滑,究竟为什么会出现这种现象呢?一位软件工程师和前 Google 实习生 Andrew Munn解释说是因为 Android 系统 UI 效率低下的框架设计的问题。

不过,这个实习生 Andrew Munn 是一个软件工程专业的本科毕业生,他在 Android 团队并没有在框架团队工作,也没有看过 Android 渲染的源代码,因此他所说的未必是 100% 准确。并且他也曾经在 Windows Phone 团队工作过,因此可能会不自觉的对 Android 产生偏见。以下就是他对 Android 为什么没有 iOS 流畅体验的看法。

Android 没有 iOS 流畅的原因并非 Java GC 导致暂停,也不是因为 Android 运行的是 Java 编译的 bytecode 而 iOS 运行的 native code,根本的原因是,iOS 的 UI 渲染采用实时优先级,而 Android 的 UI 渲染遵循传统电脑模式的主线程普通优先级。

这听起来似乎很抽象和难以理解,但大家可以尝试一下,使用你的 iPad 或者 iPhone,打开 Safari,然后加载一个复杂的网页,例如新浪网首页,当网页加载到一半的时候,把你的手指放在屏幕上,并且四处移动,你会发现所有的渲染立刻停止,在你拿开手指前,网页永远也不会继续加载。

而在 Android 设备上重复这个操作,你会发现,浏览器会继续尝试加载页面并渲染 HTML,试图多任务同时进行,因此对于 Android 来说,一个高效的双核处理器是很重要的,这也就是 Galaxy S II 能够非常平滑的原因。

在 iOS 中 UI 渲染过程具有绝对的优先等级,当用户接触到 iPhone 的触摸屏后,iOS 中所有的进程都将停止,UI 线程拦截了所有的事件,系统会将所有资源用于渲染 UI 过程,以保证用户界面的实时渲染优先级。而在 Android 系统中 UI 渲染过程的优先级别却没有那么高,也就是说当你触摸 Android 手机屏幕的时候,系统后台的程序并没有停止,仍然在继续运行之中,比如下载和查收短信,这样系统 UI 获得的资源就不够,这就是 Android 系统不流畅的原因。

由于这个原因,新发布的 Galaxy Nexus,甚至配备四核处理器的话说 EeePad Transformer Prime 平板电脑都无法保证顺滑的操作体验,这些设备只能与 3 年前的 iPhone 顺滑程度相比,那么 Android 团队为什么不从根本解决这个问题呢?

除了 UI 渲染之外,Android 缺乏有效的的硬件加速也是一个原因,在不同的 Android 手机上的硬件加速存在巨大差异,而苹果是唯一一个既做硬件又做软件的手持设备公司,只有苹果可以在硬件中插入对软件的优化,使得基于苹果芯片的设备不仅省电,而且流畅。

实际上,Android 的开发工作在第一代 iPhone 发布之前就已经开始了,原始 Android 原型体被设计成为使用键盘手机的设备,也就是黑莓手机的竞争对手。UI 渲染优先级别在有键盘的手机上并没有那么重要。但是在 iPhone 发布之后,Android 小组为了快速推出能与 iPhone 竞争的产品,迅速将 Android 改成触摸屏手机系统,但那时重写 UI 框架已经不可能了。因为如果这样 Android 应用市场中的所有程序将变得不可用,这种关系将一直处于恶性循环之中。

英文原文:Follow up to “Android graphics true facts”, or The Reason Android is Laggy