程序员两难的关键是我们如何维持一个非常灵敏的用户体验,同时又要提供一些多任务操作和维护电池寿命。Windows Phone 7提供了当应用程序处于非活动期内使用墓碑机制。本文将讨论Windows Phone 7的多任务、墓碑、这个生命周期。
整个应用程序生命周期是从程序的可执行模块启动到终止,目的是在任何时候可提供一个灵敏的系统。这时为了避免俩个以上的应用程序继续在后台运行,争夺资源,导致前台应用程序慢和损耗电池寿命。为了做到这一点Windows Phone 7只允许一个应用程序在前台运行,并不允许第三方应用程序在后台运行,当一个应用程序转到后台运行后(并没有关闭),那么它就是一个墓碑。墓碑意味著应用程序是惰性的,OS依然保存着该应用程序的状态信息。当用户重新启动前,进入墓碑状态,它可以保存当前状态,当用户在此打开时应用程序还在当前。
Navigation
当按下硬件中的返回按钮后,你的应用程序就终止了。当你在使用一个应用程序中,又启动了一个新的应用程序,但是旧的应用程序没有被关闭,它就处于非活动状态。但是它将保存很短的时间,时间一到它就被terminated。
关键的区别在于,关闭是当应用程序再被启动时是新建了一个新的实例,以前的状态没被保存,而处于非活动状态是OS保存了该应用程序的状态,不是新建实例,并不是真正的终止运行。
手机支持三种造成程序已终止的假象事件
Events are fired on the termination and resumption of an application
开发人员可以使用墓碑事件(tombstone events)来维护应用程序和当前页面的状态
当程序再次运行时,开发人员可以使用此状态来恢复应用程序
当下列任何情况发生后,你的应用程序立即进入墓碑状态
用户通过按键导航到一个新的应用程序,例如开始键
你的应用程序使用了一个launcher或者Chooser来启动另一个进程
另一方面,如果你启动了一些为数不多的本地服务,你的应用程序并不进入墓碑状态,除非新的前台程序需要更多的资源。下列是一些你可启动的,并不一定是墓碑状态的服务
· PhotoChooserTask
· CameraCaptureTask
· MediaPlayerLauncher
· EmailAddressChooserTask
· PhoneNumberChooserTask
· Multiplayer Game Invite [games]
· Gamer You Card [games]
生命周期
在应用程序这个生命周期中,状态间的相互转换都会触发一些相关的事件。
这些事件是
Launching /Activating
Running
Deactivating /Closing
所有的这些事件都在Microsoft.Phone.Shell.PhoneApplicationService 类中。
Launching
当用户点击了应用程序在开始菜单上的层,应用程序就进入启动状态,这时, Launching事件就会被触发。它总是创建一个新的实例,因此在处理launching事件上,你不过渡到一个已存在的会话,虽然你只是检查独立存储上的新实例信息。
Launching是创建新的实例,resumed是激活实例,两者是互斥的。
Running
Launching或Activating事件发生应用程序就进入运行状态。closing or deactivating事件发生就退出运行状态。
Closing or Deactivating
程序退出运行状态的;两种方式
closing说明程序已终止,Deactivating只是程序停用,它还存在内存中。
Activating
处于停用状态的程序被激活。