iOS 多任务的繁与简
双击 Home ,会在 iPhone 底部呼出多任务切换条。用户在上面选择程序,即呼即出,简洁易用。甚至,完全不知道双击 Home ,你一样享受多任务的绝大部分好处。 iPhone 之所以几岁的小孩都会用,正源于软硬件上的这种简洁。
但是,随着功能的增加,软件复杂度的增加不可避免,这是软件开发的热力学定律:墒的增加不可避免,软件生命周期的最后,难免归于混沌。还记得 Symbian 难以挪动对话框的八卦?或者 Palm OS5 那些谜一样的重启动?
扯的有点远,本文想说的是苹果这个看似简洁的多任务。
iOS 的三种多任务
第一种:保持现场
“保持现场” 并非多任务,而是一种看起来像多任务的单任务。
按下 Home 后,程序自己保存状态。下次呼出,自己恢复保存下来的现场。看起来和没有退出过差不多。
这并非 iOS4 的新特性, Tweetie 在 iOS4 之前就支持了。
第二种:iOS4 多任务
“iOS4 多任务” 是受限制的多任务。按下 Home ,程序切换到后台时仍保持在内存中,可以执行一些系统允许的动作:比如播放音乐。
iOS4 多任务的程序如果在后台无动作,那么表现和 “保持现场” 的程序差不多。有些程序,比如 Twitter for iPhone ,在 “保持现场” 的同时支持了 iOS4 多任务。
iOS4 多任务比 “保持现场” 更快,并且可以后台动作。坏处是会占用内存。而且,万一在后台被杀掉,又不支持 “保持现场”,那么再载入会丢掉上次的状态。比如那个优雅但是功能不足的推特客户端新锐: Weet 。
第三种:真多任务
Safari ,Mail 等程序有真正的多任务权限: 在后台可以无限制动作。
对手机而言,不限制这种多任务有些缺点。一个未知的程序可能会在后台执行很重的任务,让电力在用户无察觉的情况下消耗光。另外,安全性也不是很靠谱。
所以苹果仅允许少数几个程序拥有这个权限。甚至苹果自己也没有滥用: Messages , Photos 都是苹果的嫡系,却仅支持 iOS4 多任务而已。
内存
说多任务会牵扯些内存管理。 iPhone 不能用硬盘(闪存)虚拟内存,所以内存的容量是限制死的。
不支持 iOS4 多任务和真多任务的程序,按下 Home 之后 10 秒左右会被杀掉,内存释放。
iOS4 多任务程序通过 Home 退出后仍会占用内存。但是系统也随时会把他杀掉。尤其是在支持多任务,却悲剧性的只有 256m 内存的 iPad 和 iPod touch 4 上。(不过, iPhone4 上, iOS4 的多任务在程序真正冻结之后(后台,无动作),似乎会被压缩。)
真多任务?有些后台服务是安全的,比如通知管理。有些就没那么幸运了, Mail, Safari 都有被干掉的可能。
复杂
在内存,屏幕和电力都严格受限的手机上面,苹果在追求一个不可能的任务:
保持多任务优势的同时,避免消耗过多电力。
为此,在多任务管理上,苹果独自发展了一个挺复杂的方案。 Android 提供虚拟机和自动内存管理等更多先进特性,但是其实现未必比苹果的这套更复杂。
而且,不仅软件,硬件上也下了功夫: iPhone4 高度集成了各种元件,在狭小的空间内为电池留出了足够的空间。
当然,网络服务的部分, iPhone 的通知构架也为此贡献了力量。
写 Tweet 的时候,可以收到个通知,然后切换出去看一眼邮件 Copy 点东西过来真的这么难?
需要各种不同的真假多任务类型?
硬件的高度集成?
还要在美国部署一堆高性能的网络服务器来推送消息?
别忘了手机上,多任务和电力几乎分别处在跷跷板的两头。而苹果的目标,却是要两头讨好。现有电池技术的限制下,为了兼顾电力,这种复杂性可能真的是必要的。
(当然,很多人认为让用户多揣块电池出门也不是不可接受的。)
简洁
而且,苹果又在追求另一个不可能的任务:让复杂的方案,表现的简洁。
有些人要怒了,又多任务,又省电,又简洁,好处怎么都让苹果占了呢?没办法,除了技术,他在这方面还真的又~有一手。
善意的谎言
iOS 完全掩盖了多任务的不同状态。系统里没有任何一个地方能让用户区分出多任务的类型:所有程序都在一个地方,没有多任务状态标记,操作也没有不同:Springboard 呼出,Home 退出。
掩盖多任务状态相当于一个善意的谎言,这个不难。据说不少四岁宝宝都已经是过来人了。
圆谎
比较说谎,圆谎才有点挑战。要知道,凭生活大爆炸里 Sheldon 的智商,都圆的一塌糊涂。
掩盖多任务状态后,就需要保证动作的一致性。双击 Home 呼出多任务切换栏你会发现个有趣的设计:压根不能多任务的程序,比如 Instapaper ,也会出现在 “多任务” 切换栏中。
工程师可能不满意,不占内存,没有动作,却放个快捷方式? 用户在这满怀希望的删掉 Instapaper ,却没有终结程序释放内存,这不是是忽悠用户吗?
首先, iOS 是个圆谎高手:用户无从知道内存状态。更重要的,作为一个不知道多任务状态的用户, Instapaper 出现在这才是合理的。
正确定义问题
“多任务” 问题的关键是: 用户到底想通过多任务得到什么效果?操作系统教科书的作者再 NB ,和用户比较,他的定义也不重要。知道你到底要什么,取舍才有余地。
最后的话
的确,苹果很善于说 “不”。但这显然不是他的全部本领。随着 iOS 的进化,苹果给我们演示了一个更加高难度的动作:
复杂的解决问题,简洁的表现结果。