首页 » Phone » 正文

iOS/android多任务浅析

多任务,伪多任务。iOS与Aandroid操作系统的争论一直不休。双方的支持者都不甘示弱,都在谈,可谁又都谈不明白。
  说到多任务,我们就不得不谈Pushmail。这是一个很经典的(伪)多任务,黑莓靠这个一度称霸北美市场。开启Pushmail的黑莓手机不是靠后台的实时进程,而是通过消息提醒,类似现在的信息推送。这样的做法可以极大的减少电量的消耗,而那些真正实时查看的后台进程,无一例外的都是电量消耗大户。
  移动设备对于后台进程有着自己的管理方式,如果无限制的让进程在后台任意堆栈,那电量很快就会被耗尽。
  由于系统资源和电池容量的限制,移动系统的多任务与PC系统有一定的差异。桌面系统的多任务确实有多个程序在同时运行,当从一个切换到另一个时,它们都是一直正常运行的,一般不会被结束。而移动系统则是在不同应用中快速切换。当切换其他应用时,原程序被挂起,暂停执行。
  现在的移动操作系统在多任务上均有自己独到的特点,人们无不希望能同时运行多个程序,从而提高使用效率,简单有效的多任务管理模式能够提升用户体验,iOS和Android在多任务管理上有什么区别?我们下面就针对这个谈一下。

iOS是伪多任务?
  Android系统原生就支持多任务,而iOS系统是从4开始的。它的多任务并不是传统意义上的多任务,不是任何应用进程都可以在后台自由运行。真正做到支持多任务的只有苹果Safari和Mail,很多苹果亲生的应用也都并不支持。
  对于第三方应用,可以开放的后台运行接口只有音频播放(如QQ音乐)、地理位置检测(如谷歌地图)和网络电话(如Skype)等。

  在iOS中,单击Home键可以从应用中退回桌面。之前运行的应用并不是被关闭了,而是被暂时“冻结”。已经分配给它的资源仍然没有收回,它是在运行中的。当你重新点击应用,就会立刻进入,并恢复退出之前的状态。这就是苹果的快速切换应用功能(fast app switching)

苹果官网多任务解释
  双击Home键可以激活屏幕下方的夹层,后台运行的应用都在这里。但并不是所有在这里出现的应用都是后台运行的。
  iOS的多任务可以分为三种:
  1、保持退出时状态
  这种多任务只是一种看起来像多任务的单任务,当按下Home键时,程序会保持状态。待到下次呼出时便恢复保存时的状态,让人看起来好像没有退出过。就好像玩PSP上游戏的临时存档一样,退出游戏之前存一下,再次进入并读档后,这个临时存档就消失了。
  2、有限多任务
  在这种多任务下,按下Home键,程序会保存到内存中,可以执行一些系统允许的进程,如音乐播放和下载等。这种多任务更快,但会占用内存。
  3、传统意义多任务
  Safari和Mail就是这种多任务。这种多任务可以让程序在切换到后台时,无限制的做出动作。对于移动设备来说,如果不限制这样的行为,任由程序在后台随意执行,电量很快就会被用光。

  有几种情况下,应用是真正完全退出了:1、系统为节省内存而自动终止某程序;2、用户手动长按屏幕下方多任务栏中的应用并关闭;3、尚没为iOS系统重新编译过的第三方应用(如更新之前的ONE|一个),这种应用无法被冻结,所以退出即终止。

能够在后台运行的应用有限

  之所以iOS系统会给人伪多任务的印象,是因为苹果处于延迟续航时间等考虑,强制仅有少数几种应用能够被授权在后台运行。大多数应用在退出后会被挂起,挂起后的10秒钟内,仍然占用着原来的资源,用以一些善后工作。
  当后台的应用过多,运行内存不够时,系统会自动结束认为最没用的进程,或是运行最早的那个进程。而那些被允许在后台允许的应用,系统会通过专门的API给予其永久后台权限,直到状态结束或用户主动关闭。
  从多任务的定义上来看,iOS系统可以进行多任务处理,但又不完全符合传统意义的多任务。它需要挂起前一个进程才能将操作分配给下一个进程。但不管怎样,它是支持多任务操作的。   真正的后台是要付出代价的

  再来说说Android。Android系统的运行方式是这样的:当你运行了一个应用,就进入了该应用相应的层面;当你又运行了一个应用时,就又进入了这个应用的层面。新的层覆盖在旧的上面,相互叠加,周而复始。谷歌为开发者提供了7个API,来调整应用层之间的切换和运行,它的用途主要是用来设置如何切换,以及切换后要做怎样的操作。   

当新的层活动时,会叠加到下面的层上,下面的层就会冻结,或者说是被挂起。新的层处于激活状态。这时按返回键的话,所有不可见的层就全部被冻结。

在后台运行上,谷歌提供了两种解决方案:
  服务类(Service):
  可为应用提供一个内容由程序自身决定的服务,应用可以将需要在后台执行的操作写入服务中。当这个应用被切回后台,它的所以活动都被冻结。但写入服务的那些操作仍然可由系统继续执行。如QQ这样,只运行该应用的某个活动。
  广播接收类(Broadcast receiver):
  它可以让应用在后台完整运行,而不像服务类,只能运行某一部分活动。但前提是应用必须给系统一个既定的运行时间和目标,当应用消耗完时间,或达成了目标后,系统就会结束并冻结该应用的所有活动。这个类普遍存在于闹钟和GPS类的应用当中。
  当然,这两种类并不是随便给予的,还是要有一定限制条件,在某种用途中可以指定分配服务类或广播类。广播类还会根据需求限制最大时间,从而防止被应用随意使用,造成系统拖慢。
  理论上Android系统没有运行程序的数量限制,只要内存足够,可以无限制的开启任意多个应用。最后,当后台中运行的应用越来越多,运行内存吃紧,系统便会强制结束冻结中的活动。优先结束没有服务类和广播类的活动,其次是服务类,如果内存还是不够,最后就会结束广播类的活动。   总结:
  从上面两个系统的多任务的描述来看,iOS和Android都是支持多任务的,而且机制几乎相同——大体上都是,前台运行后台挂,特殊情况有权限。
  比较起来,Android系统给予应用的特殊权限比iOS要多些(这也是为什么iOS用起来比较顺滑的原因)。这还得说iOS有比较先进的推送系统,而Android就比较惭愧了。

  所以为了让更多活动及时的从后台推送到前台,Android就必须让更多的应用在后台运行,也就需要占用更多的内存和处理能力,自然需要付出更高的电力和更好的硬件作为代价。