四个断点看windows phone的生命周期

最近学习Windows phone 软件开发,首先了解了 windows phone的执行模型,自己动手下了四个断点,发现通过四个断点来看windows phone的四个状态挺容易的,特来分享。

Windows phone 基本理念:
确保只有一个程序。到目前为止你也许已经知道Windows Phone 操作系统不允许第三方应用程序在后台运行(Mango系统听说可以调用后台程序了)。说的更具体些,就是在任何时间内只有一个应用程序能运行在前台,这意味如果你的应用程序没有在前台显示,那它就没有运行。不允许第三方应用程序在后台执行的最主要原因是为了维持电池的续航时间并确保提供一个能够快速响应并且一致的用户体验。
所有Windows Phone 设备都配备了一个返回按钮硬件。这个按钮除了有返回导航功能之外,还将支持应用程序之间的切换。这是一个非常酷的特性,不同于其他类型的手机,你可以从一 个应用程序导航至浏览器或者是另一个应用程序,然后再按下返回按钮便可流畅地回到你的应用程序。这将会在不同的应用程序上获得一个十分统一的用户体验,不 论是第三方应用程序还是手机内置的应用程序套件。这意味着Windows Phone 操作系统为你应用程序的行为维护了一个目录从而来支持返回按钮的功能。这就是回退栈 。

手机对单个程序来说有四个状态: Not running, Launching, Running, Closed. 当程序在运行时,如果按了“start”键,那么程序就会从 Running 转到Deactivated 进而转到 Tomb stone (休眠,保留数据,后台并不运行)。 如果这是你按了回退键,那么程序又会重新激活 activated 状态,然后到了running的状态。

clip_image002

很直观的例子就是: 当你建立一个空的 Silverlight Windows Phone Project 时,点击里面的App.xaml.cs 文件,里面会有四个函数

private void Application_Launching(object sender, LaunchingEventArgs e)
        {
        }
private void Application_Activated(object sender, ActivatedEventArgs e)
        {
        }
private void Application_Deactivated(object sender, DeactivatedEventArgs e)
        {
        }
private void Application_Closing(object sender, ClosingEventArgs e)
        {
        }

我们可以分别在四个函数加上断点,来测试下具体的用途

当最开始的时候,我们启动这个程序,在加载的时候,首先会跳到Application_Launching 这个函数。

clip_image003

Figure 1:程序加载 Launching

这时该应用程序的实例已经被创建了,应用程序被启动了,一个启动事件被触发了,处理这个启动事件时,应用程序应该从一个独立的存储中读取所有必要的数据来为用户创建一个新的应用程序的会话进程。应用程序不应该试图从以前的应用程序实例中恢复瞬时状态。当用户启动一个应用程序,就出现了一个新的应用程序实例。

clip_image004

Figure 2: launching 后,按下F5, 程序Running

当启动事件被触发了,一个应用程序就开始运行了。 应用程序处于运行状态时,用户进行浏览该应用程序的页面等相关操作,此时应用程序会自己管理自己的状态。

clip_image005

Figure 3: 按下“Start”键 后,程序从running 状态到了 Deactivated 状态

进入类似“休眠状态”。

禁止 (Deactivating)

如果一个应用程序正在运行,随后在操作系统前台被另一个应用程序或体验替代—例如,锁屏或者启动一个Chooser,这时第一个应用程序将会被禁止。

当前运行的应用程序将会被禁止,禁止事件被触发了。并不像应用程序被终止一样,一个被禁止的应用程序可能会被逻辑删除。这就意味着应用程序不再运行。这个应用程序的进程已经被挂起或者终止,操作系统会保存能够代表应用程序的记录以及其一系列状态数据。这就使用户返回一个被禁止的应用程序成为可能性,应用程序才能被再次激活并把上次用户浏览的页面呈现出来

clip_image006

Figure4: 按下回退键,会导致从新开始, 调用了Application_Activated 函数。

当用户返回一个处于逻辑删除状态的应用程序,该程序将会被重新激活,激活事件将会被触发。在此事件中,用户的应用程序将会从一独立存储中取回应用程序的持久化数据。

clip_image008

当你程序中按下回退键,此时程序就会跳出来,系统调用了Application_Closing函数。

处理关闭事件,应用程序应该把所有的持久化数据保存到独立的存储中。此时没有必要保存瞬时状态数据,即那些只和前应用程序实例相关的数据。因为用户如果要返回一个已经被终止的应用程序,唯一的方式就是重新启动它,打开它的首页。

用户如果没有windows phone 手机,可以在VS上建一个程序,轻轻松松就可以体验他的特性。当然,开发者可以在里面添加自己的代码,比如保存用户的数据什么的,还是很方便的。

自己还是菜鸟,不足之处,敬请指正,谢谢!

posted @ 2011-11-06 12:18  OMG! 日记  阅读(1793)  评论(6编辑  收藏  举报