Windows Phone 7 墓碑机制
Windows Phone 7 墓碑机制Jaime Rodriguez
原文地址:http://msdn.microsoft.com/en-us/magazine/hh148153.aspx
一个优秀的移动平台需要意识到移动能力所带来的诸如硬件限制一类的负面影响。相比于桌面应用, 移动设备有着更小的内存,更低的处理能力,受限的屏幕显示以及受限的电池容量。考虑到以上这些限制可以得到如下结论:在一台非专注(多用途)的设备上会有许多应用程序运行,他们最终都会被关闭,这样才能给其他应用程序腾出运行所需要的资源。
Windows Phone 用一种叫做“墓碑”的机制来处理这个问题。 尽管表面上看“墓碑”是一个非常直白的命题, 但实际上在开发者中它是颇具争议的。 有些人觉得它(墓碑)没有存在的必要。还有一些人说它太难了。剩下的一些人仅仅只是讨厌“墓碑”这样一个名字。然而,尽管有着这么多的诟病移动设备的限制还是使得它(墓碑)成为了一种必须品,一款好的移动应用不得不跟“墓碑”打交道。
Windows Phone应用的生命周期
大多数 Windows Phone开发者第一次接触到这个平台的时候都会这么定义一款应用程序的生命周期:1.Start2.Run3.Exit4.Go back to 1 and start again
Windows Phone 7重新定义了这样一个生命周期,使得它更加的面向会话而更少的去面向过程。
在Windows Phone 7中 你应该这么来考虑应用程序的生命周期
1.Start2.Run3.Interrupted execution or exit4.If interrupted, come back-or, even if interrupted, start anew5.If exited, start anew
这种面向会话的模型的好处在于:用户在各个应用程序之间切换的时候不需要考虑操作系统是如何来管理系统资源的。譬如说,用户暂停游戏去查看一条短信的时候不会担心系统会直接终止游戏进程。用户期望的是看完短信能够继续刚在正在进行的游戏。如果这种机制工作的很完美的话,底层的机制就无所谓了。
当然这种机制也有它的负面影响,譬如说开发者要考虑更多的东西来保证会话( session)的持续性,因为这些会话( session)依然运行在一个传统的以处理为核心的操作系统上。 为了在这样一个以处理为核心的环境中容纳多个会话,我们需要为会话定义一些逻辑状态: Launched, Activated, Running, Deactivated,Tombstoned以及Closed(or Ended);
图1 展示的是 Windows Phone 7应用程序的生命周期。生命周期中的一些 event事件会在图2 中给出,这些是在 the Microsoft.Phone.Shell.PhoneApplicationService 这样一个类中给出的。
图1Windows Phone 7的生命周期
图2 Application Lifecycle Events
墓碑状态稍微复杂一点, 它跟PhoneApplicationService event并没有直接的关系。当一个应用应用程序被deactivated,操作系统并不会马上终止这个应用程序的进程。理论上来说,操作系统只有在需要更多系统资源的情况下才会这么做。这时应用程序甚至都完全没有察觉,它就这么被赤裸裸的干掉了。
当控制转向另外一个应用程序的时候, Windows Phone 7会立马杀死进程,但是千万不要百分百指望这样一个细节。去年2月份的时候, 微软已经在 Mobile World Congress上发表声明称:一些改进措施例如 Fast App Switching (快速应用切换)就快面世了, 不要根据一些细枝末节的描述就断定“墓碑”是否发生了。作为替代措施,我们应该做好准备,在deactivation的时候做一些工作。