Windows Phone 尽管应用程序出现在任务列表中,但它会重新启动而不是恢复

Windows Phone App Restarts instead of Resumes although it Appears in Task List

控制挂起、恢复和启动Windows Phone 带有Windows RT 的应用程序,有3 个事件: 分别为 OnLaunching -> OnLaunched 挂起 正在恢复

通常情况下,如果应用程序启动,则会触发 OnLaunching。 当应用程序暂停时,例如屏幕保护程序出现,OnSuspending 被触发。 如果我通过打开任务列表返回到应用程序,则会触发 OnResuming。

现在我遇到了以下问题

如果我切换到另一个应用程序或出现屏幕保护程序,则会触发 OnSuspending - 这没关系。 但是,如果我在大约 15-20 分钟后通过任务列表返回我的应用程序,则会触发 OnLaunching 事件而不是 OnResuming,尽管我的应用程序仍出现在任务列表中。

应用好像是新启动的!

发生这种情况是因为我在 Windows 8.1 RT 中重新设计了应用程序。 在我的应用程序的早期版本中,在 Silverlight 中是 运行,这工作正常。每当我通过任务列表返回我的应用程序时,OnResuming 就会被触发。

做了一些测试,我发现了以下内容: 启动一个应用程序,之前的执行状态可以从 ActivateEventArgs 中读取。所以我读了出来,看看启动前应用程序的状态。 第一次启动应用后,它的状态是'notRunning'。 如果我关闭应用程序并重新打开它,状态为 'closedByUser'。 如果应用已经挂起,我在15-20分钟后撤销,状态是'terminated'.

然而,状态'terminated'意味着,windows已经关闭了应用程序。

为什么 windows 已经在 15-20 分钟后关闭了我的应用程序,为什么应用程序已经关闭后仍然在任务列表中

你知道问题出在哪里吗?

Microsoft 告诉我: OS 可以终止应用程序以释放资源。但是这样的up照样可以出现在任务栏中。 如果暂停的应用程序已终止,则不会有 Resuming 事件,而是调用 OnLaunched() 并使用 Terminated 的 ApplicationExecutionState。因此,必须在 OnLaunched().

中调用恢复应用程序状态的例程

有时需要区分应用程序是按任务列表还是按磁贴重新启动的。为此,请在 OnLaunched() 中使用 TileId 属性。 TileId"App" 如果应用程序已经 由 tile 启动并且它是 empty 如果应用程序已被任务列表重新启动。如果您生成例如,TileId 也可以有另一个值。应用程序的第二个磁贴给他们另一个 ID。

但是,这在 Windows 8.1 中不起作用,因为 TileId 的值始终 "App" 独立于任务列表或标准图块启动它。