1

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

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

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

2) 为什么会触发 OnLaunched 事件?

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

提前致谢。

4

3 回答 3

2

我还没有太多使用 Metro 应用程序的经验,但我会尝试回答:

广告 1) 如果您的应用程序从 Suspended 状态变为 Running 状态(如Metro Application Lifecycle 上的 MSDN 文章中的图表所示),resumeing事件实际上应该触发。我在类似的情况下做了一些测试,它确实做到了。顺便说一句,这是我发现的对这个事件的最佳描述:

当应用程序从 Suspended 状态恢复时,它会进入 Running 状态并从暂停时的位置继续。应用程序数据不会丢失,因为它存储在内存中。因此,大多数应用程序在恢复时不需要做任何事情。但是,该应用程序可能已暂停数小时甚至数天。因此,如果您的应用程序的内容或网络连接可能已经过时,则应在应用程序恢复时刷新这些内容或网络连接。

广告 3)我所理解的 Launch 只是一种特殊的 Activation (应用程序的可能入口点之一),它对应于从Not running -> Running的转换。一些报价:

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

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

广告 2) 如果执行了OnLaunched并且没有触发Resuming事件,我猜您的应用程序处于“未运行状态”,例如它在您重新启动之前被系统终止(暂停->未运行)。我不知道为什么任务管理器可能没有刷新此信息。

于 2012-09-03T13:02:07.137 回答
0

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

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

于 2014-12-05T20:08:44.387 回答
0

我可以回答这个:

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

有一个调试按钮可用于强制您的应用程序进入暂停状态。在 Visual Studio 的快速搜索中搜索“调试位置”。这是一个调试工具栏,您在调试时点击“暂停”按钮。一旦你回到你的应用程序(在你返回之前给它几秒钟),那么你应该触发恢复事件。

于 2014-01-14T23:42:27.707 回答