如果前台应用程序终止,如何通知后台任务?
Posted
技术标签:
【中文标题】如果前台应用程序终止,如何通知后台任务?【英文标题】:How to inform background task if the foreground app is terminated? 【发布时间】:2015-02-21 14:54:27 【问题描述】:使用 Windows phone 8.1 silverlight 后台任务是 WinRT 任务。
我面临的问题是我正在运行后台任务,并且我希望在前台应用程序关闭或终止时退出后台任务。 我知道在关闭前台应用程序时,我可以使用 Application_closure 方法写入隔离存储以与后台任务进行通信。 但真正的问题是,当前台应用程序从挂起状态变为终止状态时,我该如何处理该事件。或者即使后台任务可以向操作系统查询前台应用程序的状态。 谢谢你。
【问题讨论】:
你在写什么类型的后台任务,你到底需要什么时候关闭它(挂起、失去前台状态、终止)? @Peter 我正在尝试在后台的某个时间安排 toast 通知,但我不希望前台应用程序关闭或终止时的 toast 通知。因此,如果应用程序终止,我想取消安排它。 在以前的版本中,如果应用程序在前台,Windows Phone 会抑制 toast... 不确定是否仍然会发生这种情况。无论如何,您可以解决这个问题的一种方法是使用命名事件 - 请参阅 this article and associated code 区分应用的挂起和终止状态的目的是什么?在这两种情况下,您的前台代码都没有运行,那么知道这一点有什么好处? @Jimmy Alexander :对于程序员来说,我们知道应用程序已暂停,但最终用户总是认为应用程序仍在运行。在我的情况下,如果应用程序暂停,它就像一个简单的倒数计时器,我仍然想在计时器达到 0 时向他发送通知。但如果应用程序终止,我不想这样做。 【参考方案1】:很遗憾,无法获取有关您的应用从暂停状态进入终止状态的信息。这就是为什么 MSDN 上的大多数文章都明确指出您必须在应用程序暂停之前保存任何与会话相关的数据。
您应该始终将用户信息和应用数据保存在挂起事件中,因为 Windows 在终止应用之前不会通知它们。这一点很重要,因为终止可能在多种情况下发生,例如 Windows 需要释放内存或设备失去(电池)电源时。
https://msdn.microsoft.com/en-us/magazine/jj660301.aspx
您可以做的是实现某种 ping 机制,让您的前台应用不断将时间戳写入隔离存储。如果这些 ping 超过预定义的时间戳,您可以假设您的应用已终止并退出后台任务。
【讨论】:
但是我的前台应用如果处于挂起状态就无法ping通?我想在应用程序暂停/运行时发送通知,但在关闭/终止时不发送通知。 你应该在隔离存储中有第二个标志,指示你的应用程序是正在运行还是暂停(我以为你已经有了)。重要的一点是:您无法明确判断您的应用程序是否已暂停或终止。但是:如果您的商店中只有一个运行标志但没有 ping,您可以很确定用户已经终止了该应用程序。如果你有一个挂起的标志并且两个小时没有 ping,你也可以假设你的应用程序被终止了。这一切都基于假设,您必须明智地调整系统。 非常感谢。所以我猜他们并不确定了解应用程序的状态。我认为这是一个重要的功能,MS 应该将其纳入。以上是关于如果前台应用程序终止,如何通知后台任务?的主要内容,如果未能解决你的问题,请参考以下文章