欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

理解Windows Phone 7应用程序执行模型,墓碑机制,启动器和选择器及更多内容—Part 2

程序员文章站 2022-08-17 16:03:57
  作者: yochay 在 中,你已经学习了windows phone执行模型的基础知识。了解了4种事件中的3个。我们介绍了程序的launching, closing和deacti...

 

作者: yochay

在 中,你已经学习了windows phone执行模型的基础知识。了解了4种事件中的3个。我们介绍了程序的launching, closing和deactivated事件。现在是时候来看看最后一个事件了,这就是activated。如果你想使用本文提供的代码,可以在这里wp_5f00_applifecycle/6406.lwp.applifecylce.zip">下载 。

如何继续一个墓碑化的应用程序的调试会话?——掌握activated事件

还记得我承诺要讲返回键的功能吗?现在我要兑现了。不过,在实际行动之前请先通读这些步骤和注意事项。

  1. 在visual studio中,用我们在上篇文章中创建的简单程序开始一个新的调试会话。
  2. 按下next按钮导航至程序的第二个页面。
  3. 按下windows键。
  4. 模拟器返回到了起始界面,同时你在visual studio的输出窗口中应该可以看到以下画面:

理解Windows Phone 7应用程序执行模型,墓碑机制,启动器和选择器及更多内容—Part 2

正如你所见,我们启动了一个新的实例,所以应用程序的launching事件被触发。然后应用程序的第一页(默认)被启动因此你会看到主页面的跟踪信息。当按下next按钮后,程序会导航到第二页,正如你从详情页的跟踪信息中看到的。最后,当你按下windows键后程序会被停用,同样也显示在跟踪信息中。模拟器也回到了起始界面。

注意:不要关闭模拟器或改动代码, 否则会启动一个新的程序的实例,这不是我们想要的。

  • 在windows phone模拟器中,你应该能看到起始界面,这时按下返回键。
  • 这时模拟器的屏幕会变黑就好像它在等着发生什么事儿。这是怎么回事儿呢?其实在当前的beta版工具中就是这么设计的。当它在等你重新回到调试器继续调试程序时屏幕会变黑同时程序没有重新启动
  • 重启 调试器并继续 调试会话,切换到visual studio并按f5(或者使用任何启动你的调试器的方法)。调试器会附加到相应的程序实例,模拟器继续激活程序,随后activated 事件被触发了,正如你在下图看到的:

理解Windows Phone 7应用程序执行模型,墓碑机制,启动器和选择器及更多内容—Part 2

注意 :这个过程成功与否取决于一个时间限制 ,如果重新载入程序的时间超过10秒 模拟器便会终止程序。因此你要抓紧。还有,你不应该在activated事件中添加任何断点。根据windows phone的设计指导,你的应用程序界面应该在10秒钟内加载完毕,同时由于activated事件是在主页面构造函数之前被处理,所以在进入activated事件中进行调试时界面不会显示出来。

既然已经知道该做什么了,现在就遵从上面的步骤重新激活你的应用程序使它从墓碑状态复活。你会注意到visual studio开始了一个“新的会话”(因为第一个程序的实例已经被终止了)。但这次跟踪信息的第一行显示的是activated而非launching事件,在activated事件之后,输入窗口的下一行显示了详情页面的构造函数而非程序的默认页面,主页面。如果观察模拟器你会看到程序返回到了正确的页面,它正是你按windows键之前浏览的页面。

你看,你已经亲身体验了程序是如何变为墓碑状态以及如何复活。

注意 :当你的应用程序从墓碑状态返回时,它是程序的一个新的实例,虽然是这样,但你看不到launching事件,因此你在输入窗口中看不到launching的跟踪信息。launching事件和activated事件是互斥的 ,所以在应用程序的同一次运行中你不会看到它们同时出现

一些重要事项:

launching,deactivated,activated和closing事件都是应用程序级的事件。它们总是会被触发(除非你从代码中移除——但你不应该这么做 )。如果你的应用程序有任何常规工作要处理,那么这些事件正是合适的工具(我们在后面会提到)。

如你所见,应用程序可以从墓碑状态返回到任意一个页面,所以你不能保证哪一个页面会比其他的提前加载。

关于墓碑机制最重要的一点是要记住用户可以选择不去回到原来的应用程序 ,所以你的程序可能不会被重新激活 。用户可能会在起始界面重新启动应用程序(而不是通过返回键),这会启动程序的一个新实例 。这就是launching事件还是activated事件的问题。或者用户启动了若干个应用程序,这会使处于墓碑状态的应用程序在回退栈中的位置越来越靠下以至于使用返回键无法到达。在此种情况下,你需要将你想要恢复的任何数据保存下来。当然是否在程序中存取这些数据,这完全取决于你和你的工作职责。同时这也是我们下一篇文章的主题。现在我们来看看下面的图,来自aspx">windows phone开发文档 ;这应该有助于你理解不同事件之间的关系。

理解Windows Phone 7应用程序执行模型,墓碑机制,启动器和选择器及更多内容—Part 2

现在,你应该理解windows phone应用程序中所涉及的——launching, deactivated, closing和activated事件的含义和功能了。不过这仅是刚刚开始,因为我们还有很多额外的话题需要讨论从而透彻的理解执行模型以及如何在你的程序中充分利用它。在下篇文章中,你将学习如何将你的页面状态信息保存下来到以及在何种情境下需要保存和加载这些数据。

示例代码可以 在此下载 此下载。

windows phone 7 开发人员训练套件 包含了一个专门对于 windows phone 应用程序生命周期 的完整的实验。

msdn 文档中还包含一个主题windows phone 执行模型概述

翻译本文目的为学习交流,版权为原作者所有