已阅读:2,760 次
Windows Phone 7 多任务机制剖析一:概念介绍
ian | WP7 | 2011/10/26


在早期起的版本中,Windows Phone 7一直饱受广大开发人员的诟病,因为除了墓碑机制外系统没有对多任务的任何支持,与iOS和Android相比这根本就是一个退步!因此除了如果不是OEM厂商的话,第三方应用开发者只能利用墓碑和Push机制来尽力模拟一个伪多任务的效果,但这样一来却极大的限制了应用的功能。

到了7.1之后,系统终于象征性的加入了一些对多任务的支持:即后台任务(ScheduledTaskAgent),从墓碑+Push、到后台任务代理,WP7系统显然是在走iOS的老路子,尽管有抄袭嫌疑,但是这种机制带来的效果确是很明显的,WP7系统的流畅性明显比Android优秀得多,不过Android走的是另外的路子,两者的优劣也不能仅凭此就妄下断言。

好了废话不多说,下面简要介绍一下WP7系统多任务机制的概念。

WP7.1中,多任务的机制从概念上大致可分为四种:

1. 系统内置应用:如短信、Phone、联系人等程序,这些程序可以真正的后台运行,就和PC多任务一样,在后台运行时没有任何限制。

2. BackgroundAgent:即7.1新加入的后台运行机制,当程序切入后台时,应用的大部分功能如UI等都将停止工作,只有通过Agent实现的核心功能可以在后台继续运行,不过限制太多,只能用来承载应用的部分核心功能(如IM类的接收消息、流量统计等)。这种机制可以在“后台设置”中关闭,一旦关闭后,这种后台多任务应用将降为三、四类。

3. 休眠状态:一般在应用中,用户点击Win键切出去之后,应用即进入休眠状态,跟第四种相比,此时应用虽然所有功能都停止运行,但是却依然停留在内存中,因此当用户重新进入应用时,应用能够很快速的切换回来并继续运行,从而让用户觉得程序一直在后台运行。

4. 墓碑状态:比休眠状态更彻底,进入墓碑状态时,程序真正从内存中退出了,因此我们需要保存所有的数据。当用户切换回来时,实际上程序经过了重新的加载、初始化等工作,虽然运行结果看起来和休眠状态一样,但是速度会更慢。

(休眠状态是从7.1才引入的,虽然休眠跟墓碑是两种不同的状态,但其实不管对开发者还是用户来说,这两种状态都没有什么区别,再以后会深入的对这两种状态做分析。)

WP7.1系统允许有5个同时运行的后台进程,这里的后台进程不包括上面的四类“后台”状态中的第二、四种的,即只有系统内置应用和处于休眠状态的应用会占用这5个后台进程的名额,一旦超过5个,则前面的进程会被关闭进入墓碑状态。而通过BackgroundAgent实现的后台功能则不受此限制的,通过BackgroundAgent实现的后台任务更像是一种托管的代码,尽管其不受这5个后台名额的限制,即系统可以同时有任意多个过BackgroundAgent在后台运行,但是其何时适执行、运行多久等都是由系统来决定的。

上面就是Windows Phone 7系统中多任务的基本概念,但是归根结底WP7系统是使用墓碑、后台任务这些机制来模拟的伪多任务,跟PC以及Android上的多任务有根本的区别,因此在开发WP7应用之前应该对这些概念有深入清晰的认识,否则应用在某些场景下,如应用间切换时可能会出现意料不到的业务逻辑错误。

原创文章,转载请注明:转载自ian的个人博客[http://www.icodelogic.com]
本文链接地址: http://www.icodelogic.com/?p=242

tags:

没有评论

发表评论

你需要先 登录 才能回复