Windows Phone手机系统的多任务设计

打印 被阅读次数

其他手机操作系统的多任务设计其实我不是很了解,但据我了解大概是这样:


symbian多数API都是异步的,用个变量激活activeobject的方式,后台优先级低,前台优先级高,但不管怎样后台都有机会一直运行下去。因此造成写的不好的程序一直运行导致CPU不能进入待机状态。


Windows Mobile是用消息机制,其实内部用的event的方式,当消息队列无消息时可以idle,但也可不idle一直循环下去。因此写的不好的程序耗电更大一些。同样OS一般不会剥夺后台程序运行的机会


以上两种系统在CPU已经进入待机时,没有事件的时候所有线程都休息,有硬件消息到达时只有响应消息的线程会短暂运行,然后挂起,除非那个线程彻底唤醒CPU。设计不好的程序会一直让手机在唤醒状态,虽然屏幕黑的,但CPU和其他硬件一直运作。


android我不了解,应该也差不多吧。


 


IOS里,对于第三方应用程序是前台可以运行,后台不许运行。但苹果自己的程序却可以在后台运行。后来开发了后台的接口,可以在某些事件时运行有限的时间,例如网络收音机播放缓冲区空了要下载,或者程序关闭时给几秒保存数据,VoIP电话等等,都是限制应用,限制时间。这样即使程序没写好也不会浪费太多电。


 


此外,传统的推送(push)服务是一个手机客户端对应一个服务器,每个服务至少都要保持一个连接,每隔一段时间要唤醒系统发送一个heartbeat信号给服务器保持连接。如果有许多许多推送服务,就造成要维护大量连接,系统不断被唤醒,发一大堆heartbeat,浪费电池和网络流量,要知道对于3G发射机当数据发送后要保持一段的高功率再降低功率,如果反复发很小的数据包会使手机一直在高功率状态。IOS对于推送的应用采用统一的PUSH服务器,只需要操作系统维护一个socket连接就好了,大概每15分钟才发一次heartbeat。而且当推送事件到达时,所请求的程序并未运行,需要用户主动点击才能运行,例如收到邮件,不点查看按钮是不运行邮件程序的,这样防止了后台程序通过这种方式主动跑到前台来浪费电。


 


其实我要说的是新出的Windows Phone 7.1 Mango。它跟IOS差不多,也是不许第三方程序在后台运行。为了某种应用,例如多媒体播放、插着充电器的时候用WIFI下载(不插电用3G都不许下载)等等,也可以临时在后台运行。还有同样的PUSH服务机制,微软PUSH服务器也是免费的,随便一个IIS服务器即可轻松写好PUSH脚本。后台程序的问题不仅仅是耗电,还会影响前台程序的效率,这仅仅靠线程优先级是不够的。在WP里特别保证前台程序有90%的耗用以及90MB的内存;而后台总共最多只有那10%的CPU,每个程序可以有3MB内存,多媒体程序因为要解码可以多一点,5MB内存,内存用超了OS会杀掉进程,美名曰主动防止内存泄露……开发者肯定说这太限制自由了,可是这是保障用户体验的设计,因此WP手机有如此流畅的操作,不管装了多少程序,都不怕玩游戏的时候卡,甚至优于IPHONE。

登录后才可评论.