在 Windows Phone 8.1 中的时间触发后从后台任务唤醒/启动主应用程序

Posted

技术标签:

【中文标题】在 Windows Phone 8.1 中的时间触发后从后台任务唤醒/启动主应用程序【英文标题】:Wake up/Start MainApp from Background Task after TimeTrigger in Windows Phone 8.1 【发布时间】:2014-09-29 15:17:34 【问题描述】:

这是我的场景:我在同一个解决方案中有一个 Windows Phone 8.1 应用程序 (MainApp)、一个类库和一个 Windows 运行时组件 (BackgroundTask)。 当我加载我的应用程序时,我注册了一个TimeTriggerBackgroundTask,然后操作系统会处理这个。任务有两个事件,Run 方法(在任务本身内部)和任务完成后我在类库中收到的TaskCompleted 回调。当应用程序处于前台或后台时,这两个事件都会执行。 当应用程序关闭时,BackgroundTask 仍然存在,因为它是处理它的操作系统,它始终存在。问题是,当 Task 的 Run 方法被执行时,我想在我的类库中执行方法,但由于我没有我的应用程序实例,所以我不能这样做。

那么,当应用程序关闭时,我如何从我的BackgroundTask 执行我的类库或 MainApp 中的代码?我可以通过BackgroundTask 将应用程序唤醒/启动到后台或前台吗?

【问题讨论】:

【参考方案1】:

操作系统不允许您从后台任务打开您的应用,因为这会违反用户的前台体验,因为您会在未经用户同意的情况下更改它(这就是为什么像 Rob Caplan 提到的祝酒词更有意义的原因) .您提到的TaskCompleted 处理程序在我看来是为了让您允许您的用户界面(用户可以看到)对注册任务的最后完成的后台任务实例做出反应(例如:显示更新的专辑封面在您的应用程序处于前台时在您的 bg 任务中下载)。

要从您提到的类库中运行代码以响应已完成的任务,只需引用类库(必须支持可移植库等 winRT 库引用)或将代码移动到后台任务 winRT 库并在退出之前从 IBackgroundTask.Run 方法调用该代码。

【讨论】:

【参考方案2】:

没有。无法以编程方式打开主应用程序。这听起来对您的情况没有意义,但您可以显示一条通知以要求用户打开应用程序。

否则最好的办法是设置一个需要处理的标志,然后在用户下次运行主应用程序时检查。

【讨论】:

以上是关于在 Windows Phone 8.1 中的时间触发后从后台任务唤醒/启动主应用程序的主要内容,如果未能解决你的问题,请参考以下文章

windows phone 8.1 中的独立存储

Windows Phone 8.1 中的画布移动动画

Windows Phone 8.1 中的裁剪图像问题

在 Windows Phone 8.1 中的时间触发后从后台任务唤醒/启动主应用程序

我如何采取截图编程中的Windows Phone 8.1

Windows Phone 8.1 RT 中的 ViewportControl 是啥?