ios后台和android后台区别 iOS/Android系统多任务浅析

Posted 唸慈安

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ios后台和android后台区别 iOS/Android系统多任务浅析相关的知识,希望对你有一定的参考价值。

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,来调整应用层之间的切换和运行,它的用途主要是用来设置如何切 换,以及切换后要做怎样的操作。

 

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

 

在Android系统后台冻结中的应用

  在后台运行上,谷歌提高了两种解决方案:

  服务类(Service):

  可为应用提供一个内容由程序自身决定的服务,应用可以将需要在后台执行的操作写入服务中。当这个应用被切回后台,它的所以活动都被冻结。但写入服务的那些操作仍然可由系统继续执行。如QQ这样,只运行该应用的某个活动。

  广播接收类(Broadcast receiver):

  它可以让应用在后台完整运行,而不像服务类,只能运行某一部分活动。但前提是应用必须给系统一个既定的运行时间和目标,当应用消耗完时间,或达成了目标后,系统就会结束并冻结该应用的所有活动。这个类普遍存在于闹钟和GPS类的应用当中。

  当然,这两种类并不是随便给予的,还是要有一定限制条件,在某种用途中可以指定分配服务类或广播类。广播类还会根据需求限制最大时间,从而防止被应用随意使用,造成系统拖慢。

  理论上Android系统没有运行程序的数量限制,只要内存足够,可以无限制的开启任意多个应用。最后,当后台中运行的应用越来越多,运行内存吃紧,系统 便会强制结束冻结中的活动。优先结束没有服务类和广播类的活动,其次是服务类,如果内存还是不够,最后就会结束广播类的活动。

 

ios和android后台推送机制的区别

        iOS 的推送:就是 Apple 官方的 APNs (Apple Push Notification service)。
        Android 的推送:Google 官方的是 GCM (Google Cloud Messaging)。

本质上,APNs 与 GCM 是类似的技术实现原理:即系统层有一个常驻的 TCP 长连接,一直保持的长连接,即使手机休眠的时候也在保持的长连接。这里对于大部分人来说,最不理解的就是,休眠时候都保持在那里的 TCP 长连接,不会耗电很厉害么?
答案是:不会。这是手机的设计来做到的。TCP长连接有个心跳的时间,在国外可以很长比如30分钟,在国内则因为网络环境复杂一般10分钟。客户端发起的心跳,会短暂地消耗手机电能,但在这个心跳间隔期间,则消耗电能是很少的。当在心跳期间服务器端有推送信息过来时,客户端可以收到并做处理。

iOS 为了真正地为用户体验负责,不允许应用在后台活动。有了这个限制,但是对于终端设备,应用又是有必要“通知”到达用户的,随时与用户主动沟通起来的(典型的如聊天应用)。依托一个或几个系统常驻进程运作,是全局的(接管所有应用的消息推送),所以可看作是独立于应用之外,而且是设备和苹果服务器之间的通讯,而非应用的提供商服务器。比如腾讯 QQ 的服务器(Provider)会给苹果公司对应的服务器(APNs)发出通知,然后再中转传送到你的设备(Devices)之上。当你接收到通知,打开应用,才开始从腾讯服务器接收数据,跟你之前看到通知里内容一样,但却是经由两个不同的通道而来。
 这就是 APNs 的逻辑所在:iOS 自己做个长驻后台保持连接。所有应用,有必要(申请)并且被允许(用户可以改设置)的话,可以通过 APNs 中转到达用户。

而 Android,就不同,更像是传统桌面电脑系统做法。每个需要后台推送的应用有各自的单独后台进程,才能和各自的服务器通讯,交换数据。Android 因为后台可以长驻,尤其是国内的 Android 的手机上 Google自家的推送服务 GCM 处于基本不可用的状态。所以,各App各显神通。聊天类应用的话,大多数直接借用 XMPP 规范里的一些成果。少量如微信有IM底子的,自己开发协议。这些在实现原理上与 APNs / GCM 没有本质的区别,但有一定的技术门槛。而大多数普遍应用,要使用推送的话,则使用轮询的方式简单实现。其实,国外如 Urban Airship 自己实现了 Android 上的第三方提供的推送平台。近期国内如极光推送也实现了第三方的推送平台(技术与微信、GCM、APNs类似)。理论上,如果一个 Android 设备上多款应用都使用极光推送这种第三方推送平台的话,也可以如 APNs 一样达到节省电量、流量消耗的效果。


本篇文章来源于 安卓迷 原文链接:http://www.anzhuo.me/anzhuozixun/2439.html

以上是关于ios后台和android后台区别 iOS/Android系统多任务浅析的主要内容,如果未能解决你的问题,请参考以下文章

android应用和ios的区别是啥

在交互细节上,Android 与 iOS 都有哪些区别?

IOS和Android系统区别详解

Android - 前台和后台服务有啥区别?

工作线程与后台线程android有啥区别?

如何在android上使用socket.io和后台服务?