Metro应用中的OnLaunched事件和恢复事件有什么区别?

时间:2012-08-02 11:25:25

标签: windows microsoft-metro windows-runtime

我正在尝试了解应用程序生命周期。

场景:我正在启动一个空白的应用程序;之后,我故意从该应用程序中出来并打开一个单独的应用程序。过了一段时间,我看了一下任务管理器。空白应用似乎已暂停。然后我再次启动空白应用程序(处于暂停状态)。那一刻,它必须击中恢复事件,对吧?

1)为什么恢复事件没有解雇? (应该触发恢复事件,因为应用程序从挂起状态进入运行状态。)

2)为什么OnLaunched事件被解雇?

3)OnLaunched事件是仅在应用程序第一次启动时触发,还是在终止后激活时触发?

提前致谢。

3 个答案:

答案 0 :(得分:1)

我对Metro应用程序的经验不多,但我会尝试回答:

广告1)如果您的应用程序从暂停状态变为运行状态(如此MSDN article on Metro Application Lifecycle中的图表所示),正在恢复事件实际触发。我在类似的情况下进行了一些测试,但确实如此。顺便说一句,这是我发现的这个事件的最佳描述:

  

当应用程序从Suspended状态恢复时,它将进入Running状态,将从暂停状态继续。没有应用程序数据丢失,因为它存储在内存中。因此,大多数应用在恢复时都不需要执行任何操作。但是,该应用程序可能已被暂停数小时甚至数天。因此,如果您的应用内容或网络连接可能已过时,则应在应用恢复时刷新这些内容。

广告3)启动我理解的只是一种特殊的激活(应用程序的可能入口点之一),它对应于从未运行的过渡 - > 正在运行。一些引言:

  

当应用程序被激活时,无论出于何种原因,系统都会发送   已激活的活动。

  

当用户切换到已终止应用时,系统会发送   已激活的事件,其中Kind设置为Launch, PreviousExecutionState   设置为已终止已关闭用户。该应用应加载已保存的内容   应用程序数据并刷新其显示的内容

广告2)如果 OnLaunched 已执行且正在恢复事件未被触发,我的猜测是您的应用处于“未运行状态”,例如它在重新启动之前被系统终止(暂停 - >未运行)。我不知道为什么任务经理可能没有刷新这些信息。

答案 1 :(得分:0)

我可以回答这个问题:

1)但为什么恢复事件没有解雇? (恢复事件需要触发,因为应用程序从挂起状态进入运行状态)

您可以使用调试按钮强制应用进入暂停状态。在快速搜索视觉工作室搜索"调试位置"。这是一个调试工具栏,您点击"暂停"调试时按钮。一旦你回到你的应用程序(在你回去之前给它几秒钟),你应该得到恢复事件。

答案 2 :(得分:0)

ResumeEvent未触发,因为您从开始屏幕或其固定磁贴中打开了应用。在这种情况下,该应用程序被视为已再次启动。这就是为什么OnLaunched事件被执行而不是ResumeEvent。

要确保触发ResumeEvent,请在切换到其他应用后等待10秒,然后转到左上角并将应用程序恢复到前台。确保等待10秒,然后Windows将应用程序视为正在运行。