在 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
)。
当我加载我的应用程序时,我注册了一个TimeTrigger
BackgroundTask
,然后操作系统会处理这个。任务有两个事件,Run
方法(在任务本身内部)和任务完成后我在类库中收到的TaskCompleted
回调。当应用程序处于前台或后台时,这两个事件都会执行。
当应用程序关闭时,BackgroundTask
仍然存在,因为它是处理它的操作系统,它始终存在。问题是,当 Task 的 Run
方法被执行时,我想在我的类库中执行方法,但由于我没有我的应用程序实例,所以我不能这样做。
那么,当应用程序关闭时,我如何从我的BackgroundTask
执行我的类库或 MainApp 中的代码?我可以通过BackgroundTask
将应用程序唤醒/启动到后台或前台吗?
【问题讨论】:
【参考方案1】:操作系统不允许您从后台任务打开您的应用,因为这会违反用户的前台体验,因为您会在未经用户同意的情况下更改它(这就是为什么像 Rob Caplan 提到的祝酒词更有意义的原因) .您提到的TaskCompleted
处理程序在我看来是为了让您允许您的用户界面(用户可以看到)对注册任务的最后完成的后台任务实例做出反应(例如:显示更新的专辑封面在您的应用程序处于前台时在您的 bg 任务中下载)。
要从您提到的类库中运行代码以响应已完成的任务,只需引用类库(必须支持可移植库等 winRT 库引用)或将代码移动到后台任务 winRT 库并在退出之前从 IBackgroundTask.Run 方法调用该代码。
【讨论】:
【参考方案2】:没有。无法以编程方式打开主应用程序。这听起来对您的情况没有意义,但您可以显示一条通知以要求用户打开应用程序。
否则最好的办法是设置一个需要处理的标志,然后在用户下次运行主应用程序时检查。
【讨论】:
以上是关于在 Windows Phone 8.1 中的时间触发后从后台任务唤醒/启动主应用程序的主要内容,如果未能解决你的问题,请参考以下文章