
双击 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 的进化,苹果给我们演示了一个更加高难度的动作:
复杂的解决问题,简洁的表现结果。
Hidden due to low comment rating. Click here to see.
@wengyao, 这就是一个被忽悠的例子。那不总是假的,有时还真的是真的。:)
别管iPhone的多任务是假的还是说Android的多任务就是真的,反正我就知道在iPhone上玩Angry Birds,退出后再进入,还可以继续玩刚才玩到一半的那关。在Android上就必须傻傻的看Angry Birds再从头重新进入一遍。
就玩游戏来说,Android他妈的多任务在哪里了?
@musiXboy, 为啥我在android上angry bird从来都是直接暂停恢复?
@人类, 呃。。。。我刚看了一下又可以了,以前不可以的貌似是那个Beta版。。。
@musiXboy, 古奥站长哈:)
android上明显angrybird可以啊,不过fruit ninja好像不可以的说~~
@musiXboy, 你玩的是正式版的还是测试版的?我玩正式版的时候正好有电话打进来.然后接完电话后在点图标就可以继续了!
总是有sb乱喷……果粉果然脑残居多……
说到这个多任务,越狱后有个remove recents可以只显示真正的多任务,不过有趣的是,我给有的人自作主张的装了这个之后,有人反而不习惯了,因为本来那个也有收藏夹的味道,去掉之后要一页页自己去找,反而浪费了时间。
ps:说双击home是小孩都人做的事情,我还真遇到不少人都不知道这个功能,都抱怨说怎么多任务是骗人的…….
@lifan, 完全不知道双击,其实一样享受多任务的好处,这是苹果设计的另一个妙处。。。
@kkk, 可惜对那些人来说,他们看不到细节的变化就依旧认为所谓的多任务并不存在,因为保存现场也不是多任务才引入。另外如果你开启超过20个以上支持多任务的大游戏,当剩余内存低于20m,后果就可以预见了。而且对文中的内存管理我有点补充,iphone 4之前可能是这样,但iphone 4似乎有点不同,这个有待后续研究。
@lifan, 是的,iOS4的多任务在程序真正冻结之后(后台,无动作),似乎会压缩或者写入磁盘并释放内存。具体怎么干的不太清楚。。。
@kkk, 嘿,这个其实我认为是by 机型,而不是系统。当然现在数据不足,所以大家都是基于自己的知识和经验得出的结论,晚一点就会清楚了了。
@lifan, 有可能,我只是在iPhone4上观察过,回家在ipt4上看看有没有。:)
看到鼓吹Android的多任务,你知不知道Android最流行的一个app是什么? Advanced Task Manager 。 如果不是Android失败的多任务,用户是完全不需要此类app的。
@proper, Task Manager 也是WM 6.5 的老传统了。从这种意义上说,Android 跟WM还有几分相似。而iOS跟Palm也神似~
Hidden due to low comment rating. Click here to see.
@nuller, 请指出哪里逻辑错误了? Android的多任务设计压根就不需要任务管理器,或者说不应该由用户来操心。现在管理器软件这么火,然后你觉得是没有因果关系的?
如果不装管理器运行良好,那么为什么管理器软件这么火?难道用户喜欢自找麻烦么?
@proper, 第三方的任务管理器流行就说明安桌多任务失败我看不出有什么逻辑关系,很多人用任务管理器只是出于习惯,就像我现在用里程碑的同学,我跟他说了安桌不需要任务管理器,可他就是习惯经常清空内存。安桌本身就是开放的系统,很多人用第三方的短信程序,拨号程序,照相程序照这么说安桌就是一无是处了?那很多人在iphone越狱用background说明了什么?
@nuller, 里程碑不用任务管理器根本不现实,除非你不装任何软件,否则开机之后只剩下三十几兆内存,非常慢
@handersen, 不知道你有用过里程碑没。我现在就用的这机器回帖,官方rom,用了大半年这几,程序装了不少,不过重来没用过任务管理。如若不信这种程度依然流畅,我可以提供演示视频以证明。启动剩余多少内存对运行速度还真没什么影响。任务管理器存在的理由不是为了释放内存,而是终止一些开发有缺陷的程序。android内存和多任务管理还是很出色的。大概原理其实和苹果差不多,只是多了个服务的概念。启动时预缓存只是为了加快启动速度。一般用任务管理器清内存的基本属于以前的使用惯性。苹果上如若有类似应用绝对也会有不少用户使用。也有心理暗示的因素
@handersen, 呢.某些开发上没利用好这套调度机制的应用可能会拖慢整个系统,但却不是内存不足导致的。
多任务对乔布斯来说一开始没设计好才是真的
@proper, 第三方任务管理软件并不代表多任务系统不好,相反,第三方任务管理器的存在使得很多不需要一直在后台运行的程序可以释放出来,这也是节省电量的一种做法.并不能说明这个软件就代表的多任务系统的失败.
Palm不是早就有了这种“保存现场”的机能了么,是苹果做的就那么了不起么。
所以苹果开发了很多基于ios系统的产品 让喜欢多任务的ios爱好者可以真正的执行“多任务”
@sk.y, 哈哈,这个吐槽很赞~
@sk.y, 这样说机器人都活在平行世界里了:P
webos 用户 俯视 ios4 和 android
竟然还有人说ios4的多任务是假的?!
我就当是普及知识了,说说多任务究竟是怎么回事。
在几十年前,那时还没有操作系统,使用计算机就是往里面输入0和1,也就是高低电平。后来有了纸带,也就是现在硬盘的前身。再后来计算机的性能越来越好,可以有多余的资源供操作系统使用,于是就产生了操作系统,管理整个计算机的资源。
不过和现在相比,那时的计算机的性能仍然不够用,必须把所有的资源都集中在一个任务上,这样任务才能在可以接受的时间内完成。也就是说任何情况下都只有一个任务可以使用计算机的资源,任务一旦被打断即结束。这就是单任务操作系统,有的也叫批处理系统。
30年前,计算机的性能已经有了很大的提高,完成任务的时间也越来越短,甚至超过的人的反应速度,如果只是等待人的操作,计算机的利用率就会很低。为了让计算机能够卖命的工作,人们就发明了多任务操作系统,可以使许多工作一起做,而不比等人的指令。
而问题出来了,大家都知道,那时的计算机只有一个cpu,cpu也只有一个核心,计算机的指令,也就是0和1的编码,只能一条一条的按顺序执行,根本无法同时执行。如何才能让多个任务同时执行呢?先驱们想到一个主意:把任务排好顺序,轮着执行,每个任务只运行0.1秒,0.1秒后就交给下一个任务再运行0.1秒,在使用的人眼里,就好像是好几个任务同时运行了。
30年来多任务系统一直都是这样的,真正的并行操作只存在于多cpu和多核心的机器上,在单核心的机器上,从未实现过真正的多个程序并行执行。
在来说说ios4的多任务。
ios4是完整的多任务,这是毫无疑问的,因为单任务系统在任何情况下都不能有两个或者两个以上的程序使用系统资源,只要有一个反例存在,就不能说它是单任务系统,大家也都知道,iphone的里有很多程序是一直运行的,比如phone程序,不管你用safari浏览网页也好,玩游戏也好,phone程序都是一直在运行的,当然,越狱后的backgrounder更是个很好的证明。
有人说ios是“伪多任务”,这也是完全错误的。伪,就假的意思,“假多任务”就是“不是多任务”。计算机科学对操作系统的划分非常明确,只要不是单任务,那就是多任务,不存在中间地带。“伪多任务”根本就是错误的说法。
为什么ios的任务暂停算是怎么回事呢?大家需要明白一点,“暂停”是任务运行的一种状态(就好像睡觉也是人的一种活动),比如正常情况下你的程序是0.1秒执行一条指令,但是现在cpu有更重要的事情要做,忙不过来了,你的程序只能1个小时甚至是1年才执行一条指令,在你看来,你的程序就被“暂停”了。
现在的情况就是,ios为了保证更重要的程序能够顺畅的运行,把那些暂时不用的程序的运行速度无限放慢了,当需要它的时候,再恢复正常的运行速度。
windows中有个功能叫做“暂停”,unix有个命令叫做nice,效果就和ios4的任务切换完全一样。
所以,ios4是标准的多任务系统,只不过多任务切换的时候,默认使用了暂停功能而已。
over
@bicheng, 其实他们用的是没越狱的iPhone 3G运行iOS4…..
@bicheng, 这么说的话Palm OS岂不是彻底的多任务了?
@不知道, palm的单任务在hack和DA的帮助下非常方便,并不亚于ios的任务管理,后台的im还超过没有越狱的ios
@handersen, palm os 的hack和da等东西在系统上风险是很大的。而且会互相影响。更毫无安全性可言。和unix内核的ios比较类似石器时代vs现代文明。
@bicheng, 任务、进程、前台/服务,都是有区别的
@bicheng, 这么说连s40都算得上多任务了
@bicheng, 呵呵,还是有些道理,操作系统的多任务也不过是保存/恢复现场,只不过是用定时来控制,而ios是用时恢复,可算一种改进吧。
老式的多任务必然导致耗电问题、cpu负荷问题,在手持设备上是有问题的,之前有想可以改进任务时间片的流转,比如只留10%的cpu计算给后台,那么即可以“真”多任务,又可保证流畅及电力,–呵呵 瞎想哈,没有认真研究。
以上来自
http://www.macx.cn/a/a.htm?B=3000&ID=1552768
感谢原作者,不管他说的有多少漏洞,关于多任务的概念普及可以让那些上来就喷的朋友稍微参考参考
@proper, 包括我在内,许多人都认为“多任务”就必定是系统中有多个任务(可以和用户交互的带有可视化界面的进程)同时运行(占用CPU和内存)
@钢盅郭子,
多任务就是可以同时做多个任务。
操作系统教程上其实也是这个意思。太多人故弄玄虚了。
@钢盅郭子, 多任务==系统中有多个任务(可以和用户交互的带有可视化界面的进程)同时运行(占用CPU和内存)?自相情愿了吧
@bicheng, 可以和用户交互的带有可视化界面的进程——在Windows上就是一个窗口
“不支持 iOS4 多任务和真多任务的程序,按下 Home 之后 10 秒左右会被杀掉,内存释放。”我测试了,没用,我3.13的系统,我在SBSTING里边看了有邮件进程,然后按住home15秒后放开,结果看了后内存没释放,而且邮件进程还是在。
@steve, 邮件是文中的第三种多任务。真正的多任务,轻易不会被杀掉。
@kkk, 收到,谢谢!看来邮件在iPhone里边是非常重要的一个环节。
@steve, 你关了PUSH就能杀掉MAIL进程。
@Steve, 我的PUSH已经关闭,但是我用EXCHANG同步GOOGLE的日历,还是会每天有个时段自己会更新。
@steve, 3.1.3?人家说是4.0
哎 受不了 一个多任务就没消停过 以前是彻底没有 现在是讨论真假 就没有实打实的不管怎么看都是的多任务
是不是可以加入类似功能呢?比如:在程序运行时,单击home结束程序,双击home则程序后台运行,这样可以使用户自主选择需要后台运行的程序(ps:安卓用户)
@noNull, 这不是重点,IOS强调的是不让用户在这上面费心选择。
Android有swap分区的 也就相当于PC上的虚拟内存分区
而苹果就只有传统的物理内存 从这方面来说Android的多任务系统确实要强于苹果
@左声道, ios有虚拟内存啊。/sbin/dynamic_pager。只要你敢用。
S60同时可以运行几十个程序,多了也无用,只说浏览器最少也得运行3个以上吧,切换各有用途,人睡机不停,先不说iOS是否真正多任务,就是目前它的传输、兼容方式就可以放弃之
K兄,这篇文章我是真的没看明白
太散了
@wtl, 好吧,下次拆成两个BLOG说。:)
文章不错,其实刚出的时候我就跟很多人讲过ios4的多任务,无耐愚民太多,什么都不懂就知道喷。去看看cnbeta上转载的这个文章后面的评论,基本都是脑残喷子,甚至用都没用过就来冷嘲热讽。
本来apple这种做法算是给移动设备启了个好头,wp7的墓碑方式就是同理的。不过天朝太多搞笑的能买起5000块的手机,却买不起几块钱的软件的人了,所以在很多盗版用户那边由于不能即使更新新版软件,他们的大多数程序都还没更新到能支持ios4的多任务运行方式,然后就一传十 十传百的甚至连刚买iphone4的一无所知的mm都直接跟我说iphone的多任务是假多任务,我真无语。
最后说下qq那类型的即时通讯软件,每次听到说什么iphone qq后台,后台的我就无语,本来ios4就没真正的后台。官方版的msn 还有fring skype做的都很好,都是用文中说的保持现场+推送的方式来完成多任务,然后服务器一直把你显示成在线(即时你双击home,关闭程序以后),所以看起来跟真正多任务一样,而且还不耗电。
可是腾讯自然不会让服务器一直把你显示成在线了,这样不相当于帮你挂着qq升级么,于是这帮脑残的人就给iphone qq弄了个什么“推送在线” ,还把好友列表里iphone qq的图标弄的跟别的手机qq不一样,真是脱裤子放屁啊。
再者,退一步说就算腾讯小气以后服务器不给挂真正在线,只能显示推送在线,但是起码 在写iphone qq的时候在 切换回来的瞬间应该加个重新读取好友列表的操作,而现在的qq,每次按home键关掉,再在任务栏切换回来就直接回不去了,除非log out然后重新登陆。
@不错, 太赞了。QQ这个软件的缺陷,不是iOS本身造成的。虽然在S60上,QQ的表现堪称完美,但是在iOS上就应该用iOS的玩法。相信腾讯以后发布的新版会好好利用推送模式的。
同意,qq的app其实有很多亮点,但是多任务(假多任务)的架构还需要斟酌
因为在天朝用户S60用户最多,腾讯当然给力,V5版QQ现在连动态表情都支持了,不过V3版QQ依然是最完美的,已经不仅仅是聊天工具了,把QQ空间、邮箱、微博、说说、游戏等应用整合到了一块,正在向社交工具这个趋势发展…更重要的是,V3键盘机打字聊QQ真的比触屏机有手感…
这是它长期发展得来的先天优势
我不管真假,只想知道———比如在iPad上的Dropbox里有一个epub文件,调用Stanza读过之后,怎么样能够直接后退回到Dropbox中。
@cci, 了解……ios是想尽可能的简化操作,让系统更智能。但是自动有时候不如手动来的自如……
苹果把ios发展了4代才给用户带来了所谓的“多任务”,果粉们泪流满面,选择性遗忘了他们一直在用的windows和占有率绝对超过ip的海量塞班s60和WM系统手机一直都是有多任务的。
果粉智商之低可见一斑。
@leviathan, 你很悲剧啊,本来一二三代就可以通过越狱安装插件实现多任务切换,可见没摸过iphone的喷子多么无知。
@leviathan, 太同意了,自从用了IPAD才开始接触果粉这个群体,觉得脑残的居多。就说这个最简单的多任务,越狱之后可以通过软件实现现有程序的多任务切换,而不必理会什么真假多任务,但IOS非得把责任推在程序没有及时更新的原因上。