您的位置:首页 > 移动开发 > IOS开发

IOS、Andriod、WP8 三大系统后台运行及消息推送机制

2014-11-07 22:39 781 查看


一、IOS


(I)后台机制

IOS提供的伪后台支持后台音乐播放,GPS定位,网络语音通话,以及任务完成。也就是说仅只有这四项工作可以真正在后台运行。所谓任务完成是指在程序退出的时候还有工作没处理完,比如保存进度存档,那么系统允许程序在后台继续工作,然后在完成保存进度之后停止运行。

除了上述四项后台功能,系统还提供一个程序快速切换的功能,这个功能也算是IOS多任务的一部分。个人观点,这个功能是IOS多任务中最先进最有用的功能。它让程序在最小化的时候仅仅是暂停运行,但并不释放内存,保持程序当前的状态,这样当你再次打开这个程序的时候,程序不需要重新从硬盘(闪存)中读出,不需要重新Load数据,而是瞬间恢复到上次退出程序时的状态,这个特性会给用户很强的多任务的感觉,仿佛程序从来没有退出过一样。而这个功能所花费的代价只是一块内存,而并不消耗cpu时间。什么意思呢?就是说快速切换并不比退出程序多耗一丝电,相反,由于再次打开程序的时候不需要读硬盘(闪存),它比退出程序再重新启动更省电!

第一点是:为快速切换所保留的内存空间是可以被挤占的。IOS是没有内存交换空间的,它不会像Windows那样把硬盘(闪存)虚拟成内存来建立一个对应用程序来说无限的虚拟内存空间。所以,在IOS中,当前台程序内存空间不足的时候,系统会释放掉为后台程序保留的用于快速切换的内存,提供给前台程序使用。当然,如果所有能释放的内存都释放了,还不能满足前台程序的内存要求的话,系统会直接中止前台程序的运行,这就是我们为什么会看到有些程序运行中无故退出的原因。用于快速切换的内存可以被挤占这个特性是很先进的内存动态管理方式,特别适合于内存资源紧张的移动设备。这种内存管理策略的优点是在几乎不消耗任何额外的时间(CPU时间,程序在后台暂停)、空间(内存空间,可以被挤占)资源的情况下,可以提供一个性能优良的伪多任务环境。但是正因为快速切换的内存可以被挤占,所以它的缺点就是它不总是可用的。大家都有经验打开Safari的时候,有时能够直接显示上次退出时候的网页,有时候就需要重新载入,就是这个原因。

关于快速切换我们需要知道的另外一点是,在每个程序最小化的时候,系统都会给程序发送一个通知,告诉程序你现在已经被最小化了。这时候一个优雅、精良的程序会释放掉可以释放的一部分无关紧要的空间以节省内存,比如画面缓存。这个特性的意思是支持IOS多任务的程序被快速切换到后台以后占用的内存空间会比在前台运行时少。

越狱后的IOS安装Backgrounder可以实现真后台,Backgrounder是一个对IOS行为影响巨大的程序,越狱之后费电厉害的一大半原因是因为这个程序。Backgrounder的真后台的操作方式就是在程序最小化的时候不给程序发送这个最小化的通知,所以程序不知道自己已经在后台了,不仅是仍然占用和在前台时一样多的内存,而且还在继续运行,和在前台时一样烧电。而除了几个操作系统底层的精灵进程之外,所有程序在IOS的原生后台状态下都是暂停运行的,不烧电的。不仅如此,就算是已经在后台的程序,如果它支持IOS多任务,那么它在收到系统发出的内存不足通知的时候,它还可以继续释放更多内存。比如Safari,在刚最小化的时候,它是保留所有打开的网页的,之后如果系统发出内存不足通知,Safari就可以一个一个地释放已打开的网页所占用的内存。


(II)消息推送

Push 的工作机制可以简单的概括为下图



图中,Provider是指某个iPhone软件的Push服务器,本文以使用.net作为Provider为例。

APNS 是Apple Push Notification Service(Apple Push服务器)的缩写,是苹果的服务器。

上图可以分为三个阶段。

第一阶段:.net应用程序把要发送的消息、目的iPhone的标识打包,发给APNS。

第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把消息发到iPhone。

第三阶段:iPhone把发来的消息传递给相应的应用程序, 并且按照设定弹出Push通知。

1、首先是应用程序注册消息推送。

2、 IOS跟APNS Server要deviceToken。应用程序接受deviceToken。

3、应用程序将deviceToken发送给PUSH服务端程序。

4、 服务端程序向APNS服务发送消息。

5、APNS服务将消息发送给iPhone应用程序。

就拿微信来说,其实你在使用微信的时候,收到的微信消息,并不是来源于腾讯的服务器,而是来源于苹果的服务器,他相当于当做了你手机的后台,在你手机把微信关闭或者QQ关闭后,之前所登陆的服务器会缓存到了苹果服务器(或者说某个服务器),然后之后别人发送消息,那个服务器收到后进行分析,再把信息给传送到你的手机上。


二、Andriod


(I)后台机制

使用过Symbian或Windows Mobile系统的用户普遍都会有一个习惯——频繁关注剩余RAM的多少,恨不得把一份RAM掰成两瓣儿使,且生怕后台有什么应用程序开着耗光手机电量,但Android采用的是不同的内存管理机制:当用户从程序切回主界面时,该程序会被暂停,系统此时不会给它分配CPU资源,这样做一来可以增加下次进入该程序的速度,二来不会在多任务的时候耗电过于严重,三来更不会拖慢系统速度,正所谓一石三鸟。经常使用Android程序的用户可能就有这样的体验,Home键切回主界面再回来的时候,程序还要从主界面再次Loading,这就是该机制所致(当然也有例外,后文会加以描述)。实际上,Android程序对于RAM的消耗很厉害,这是因为Android实际上是基于Java的,每个打开的应用程序都带有一个Java虚拟机,因此相比其他系统会消耗更多的RAM,但这样做有很大好处——单一的程序崩溃并不会影响到系统的稳定性,算是一个有益的Android特性。

我们可以看到,Android平台在保证多任务的同时兼具了兼顾了稳定性和速度,但正是由于其他平台给用户带来的思维定势,让很多Android用户认为后台只要开多了自然会变慢,自然会缩短续航时间,但其实用户大可不必在这方面费脑筋。


(II)耗电和自启动

后台进程,例如微信(需要推送)或者音乐播放(需要后台运行)等应用,这些应用再被切换到后台时会自动开启一个Service服务(服务都是在某个进程中开启),这些附带Service服务的应用才会消耗CPU资源以及电力。没有Service的一般应用基本是不消耗CPU资源和电力的。

很多人觉得双核CPU会更耗电,其实使用过摩托罗拉Atrix 4G的用户应该最有发言权,使用双核的Atrix 4G由于核心协同工作提高了工作效率,反而更省电,Android手机最费电还是屏幕,尽可能减少屏幕开启时间和调低屏幕亮度,是延长待机时间最有效直接的方式。

关于应用程序自启动,相信很多人都有这个疑问,“我明明关了程序,为什么过一会儿它又自动运行了?”这些自动启动的服务都是插件必须、同步需要,或后台正在运行的Service对应的应用程序,有些时候后台程序并不是真的启动,而是保持了暂停状态,以便用户最快速进入,这是上面提到的Android系统的一个优点,只要启动的程序没有Service项,它们实际上都只是出于暂停状态,并不会消耗CPU资源或者电力,和这些程序较劲其实是没有任何意义的。

当然,如果真想杜绝它们自启动的话,方法还是有的,第一种是在手机待机的时候关闭网络,这样绝大部分应用程序都不会再自行启动;第二是Root后删除对应的自启动应用程序,从源头上灭掉这些程序,不过这两种方法在笔者看来绝对是弊大于利的。


(III)App2SD和程序卸载

关于App2SD,使用PC的经验告诉用户,C盘空间越小PC速度会越慢,因此很多人开始尝试开启App2SD,甚至对存储卡分区,希望将程序转移到SD卡上面,为Android手机省出一定的空间,希望提高手机运行的速度,但这样做也有很大的弊端,第一是会导致耗电的增加,第二是部分插件失效,第三是程序运行效率下降,此外对SD卡也提出了较高的要求。

关于程序卸载,很多人买到Android手机后,会发现自己无法卸载手机中的一些程序,其实这是和固件有关系的,有些厂商或运营商会将修改版的固件刷入手机,固件中的程序已经属于系统级,自然很难删除,用户只有将自己的手机Root,然后才能进行系统级别的修改。


三、WP8

(I)后台机制

下面是微软官方对WP8后台任务机制的解释:

微软说,在WP8中后台程序有两种,一种是“PeriodicTask”(周期任务)——占用资源、数据较少需定时运行的任务,一种是“ResourceIntensiveTask”(资源集中任务)——占用资源、数据量都比较大 的。开发者要在开发app时要选定自己的app类型,或者是一个不带后台的app。对于这两种任务的运行,微软有着严格的运行机制:

一些共同的机制,例如:

1)一些API对于这两种后台程序都是不可用的

2)无论哪种后台,在运行时非视频任务占用内存不得超多11MB,视频类任务不得超过15MB,一旦超过将被立即终止

3)对于超过两周没有主动运行的程序将自动组织其对应后台

当然在这条下面还有很多细分情况,有兴趣的可以自己看

接下来是一些分别的限制,例如,对于“PeriodicTask”(周期任务):

1)每半小时运行最多25S

2)节电模式下停止运行

3)对运行数量有所限制。如果程序没有出现在后台任务列表中,则最多只能运行6个此种后台任务

对于“ResourceIntensiveTask”(资源集中任务)的限定则更加严格,包括:

1)只能在电量大于90%时开启后台运行;

2)只能在充电或有外接电源时开启后台运行;

3)只能在锁屏时运行;

4)只能在连接了电脑或wifi时运行,不占用流量

5)只能在没有通话时运行;

6)一般可连续运行十分钟

所以这样看来,WP的后台绝不是什么安卓的“真后台”,而且对资源的管理非常严格以保证系统的流畅和续航


(II)消息推送

WP8后台消息推送机制类似于IOS,从目前来看,WP8消息推送功能远不如IOS,一方面WP8还在起步阶段,系统还不成熟,另一方面,国内网络“不稳定,不开放”;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: