作者: Yochay
在上篇文章 中,你已经学习了Windows Phone执行模型的基础知识。了解了4种事件中的3个。我们介绍了程序的Launching, Closing和Deactivated事件。现在是时候来看看最后一个事件了,这就是Activated。如果你想使用本文提供的代码,可以在这里下载 。
如何继续一个墓碑化的应用程序的调试会话?——掌握Activated事件
还记得我承诺要讲返回键的功能吗?现在我要兑现了。不过,在实际行动之前请先通读这些步骤和注意事项。
正如你所见,我们启动了一个新的实例,所以应用程序的Launching事件被触发。然后应用程序的第一页(默认)被启动因此你会看到主页面的跟踪信息。当按下Next按钮后,程序会导航到第二页,正如你从详情页的跟踪信息中看到的。最后,当你按下Windows键后程序会被停用,同样也显示在跟踪信息中。模拟器也回到了起始界面。
注意:不要关闭模拟器或改动代码, 否则会启动一个新的程序的实例,这不是我们想要的。
注意 :这个过程成功与否取决于一个时间限制 ,如果重新载入程序的时间超过10秒 模拟器便会终止程序。因此你要抓紧。还有,你不应该在Activated事件中添加任何断点。根据Windows Phone的设计指导,你的应用程序界面应该在10秒钟内加载完毕,同时由于Activated事件是在主页面构造函数之前被处理,所以在进入Activated事件中进行调试时界面不会显示出来。
既然已经知道该做什么了,现在就遵从上面的步骤重新激活你的应用程序使它从墓碑状态复活。你会注意到Visual Studio开始了一个“新的会话”(因为第一个程序的实例已经被终止了)。但这次跟踪信息的第一行显示的是Activated而非Launching事件,在Activated事件之后,输入窗口的下一行显示了详情页面的构造函数而非程序的默认页面,主页面。如果观察模拟器你会看到程序返回到了正确的页面,它正是你按Windows键之前浏览的页面。
你看,你已经亲身体验了程序是如何变为墓碑状态以及如何复活。
注意 :当你的应用程序从墓碑状态返回时,它是程序的一个新的实例,虽然是这样,但你看不到Launching事件,因此你在输入窗口中看不到Launching的跟踪信息。Launching事件和Activated事件是互斥的 ,所以在应用程序的同一次运行中你不会看到它们同时出现 。
一些重要事项:
Launching,Deactivated,Activated和Closing事件都是应用程序级的事件。它们总是会被触发(除非你从代码中移除——但你不应该这么做 )。如果你的应用程序有任何常规工作要处理,那么这些事件正是合适的工具(我们在后面会提到)。
如你所见,应用程序可以从墓碑状态返回到任意一个页面,所以你不能保证哪一个页面会比其他的提前加载。
关于墓碑机制最重要的一点是要记住用户可以选择不去回到原来的应用程序 ,所以你的程序可能不会被重新激活 。用户可能会在起始界面重新启动应用程序(而不是通过返回键),这会启动程序的一个新实例 。这就是Launching事件还是Activated事件的问题。或者用户启动了若干个应用程序,这会使处于墓碑状态的应用程序在回退栈中的位置越来越靠下以至于使用返回键无法到达。在此种情况下,你需要将你想要恢复的任何数据保存下来。当然是否在程序中存取这些数据,这完全取决于你和你的工作职责。同时这也是我们下一篇文章的主题。现在我们来看看下面的图,来自Windows Phone开发文档 ;这应该有助于你理解不同事件之间的关系。
现在,你应该理解Windows Phone应用程序中所涉及的——Launching, Deactivated, Closing和Activated事件的含义和功能了。不过这仅是刚刚开始,因为我们还有很多额外的话题需要讨论从而透彻的理解执行模型以及如何在你的程序中充分利用它。在下篇文章中,你将学习如何将你的页面状态信息保存下来到以及在何种情境下需要保存和加载这些数据。
示例代码可以 在此下载 此下载。
Windows Phone 7 开发人员训练套件 包含了一个专门对于 Windows Phone 应用程序生命周期 的完整的实验。
MSDN 文档中还包含一个主题Windows Phone 执行模型概述 。
查看原文。
翻译本文目的为学习交流,版权为原作者所有。