1

阅读 Windows Phone 中的后台代理。所有指南都说我应该从专门为代理创建一个新项目开始。这是要求吗?引用地方。

更大的问题是——框架如何找到实现计划任务的类?AFAIK,启动后台任务涉及调用ScheduledActionService.Add()ScheduledAction派生对象作为参数传递。在这里我看不到任何指向任务实现标识的指针。清单中也没有注册任务。

4

2 回答 2

2

是的,后台任务需要位于单独的项目中。理论上后台任务可能在原始项目中,但是它很容易达到内存上限,因为需要加载整个项目才能运行后台任务代码。

它还需要使用“添加参考”添加到您的主应用程序项目中。
具有后台任务的项目也需要有类,即ScheduledTaskAgent类的子类。

然后(在 WP8 应用程序的情况下)当您的应用程序使用 Visual Studio 构建时,如果 Visual Studio 使用 ScheduledTaskAgent 找到此类引用的项目,则将新条目注入WMAppManifest.xml以告知应用程序启动器此应用程序具有可用的后台任务,并且如果用户实际注册此任务以运行,WP OS 应启动位于应用程序清单中的程序集。这是它在清单文件中的外观:

<Tasks>
  <DefaultTask Name="_default" NavigationPage="MainPage.xaml" ActivationPolicy="Resume" />
  <ExtendedTask Name="BackgroundTask">
    <BackgroundServiceAgent Specifier="ScheduledTaskAgent" Name="EreaderBackgroundAgent" Source="EreaderBackgroundAgent" Type="EreaderBackgroundAgent.ScheduledAgent" />
  </ExtendedTask>
</Tasks>

DefaultTask条目只是描述了默认的应用程序入口点,ExtendedTask后台任务的入口。

另请注意,在为 Windows Phone 7.5 开发应用程序时,必须手动将此条目添加到清单中,并且开发人员发布的应用程序在清单中没有此条目是一个常见问题。

还有一个有趣的发现,如果你在主项目中引用-> libraryA,即引用另一个 libraryB,并且只有 libraryB 实现了 ScheduledTaskAgent,那么 Visual Studio 不会将该条目添加到清单中,因为它无法检查间接引用的项目 -如果 libraryA 没有 ScheduledTaskAgent 实现,则该库不被视为后台任务库。但是,您可以再次手动将 libraryA 的条目添加到清单中,它会正常工作。

于 2013-11-15T12:35:58.583 回答
1

清单中也没有注册任务。

他们是。请参阅清单文件中的“BackgroundServiceAgent”元素:http: //msdn.microsoft.com/en-us/library/windowsphone/develop/ff769509 (v=vs.105).aspx

最后,我不知道是否需要创建一个单独的项目。通过在清单中手动添加该行并指向主项目中的一个类,我看不出有什么可以在技术上阻止后台代理工作。不过我没试过。尽管如此,将后台代理放在单独的程序集中还是很方便的:代理的内存限制非常低,因此不必加载主项目及其依赖项可能会节省数百 KB 的内存

于 2013-11-15T06:54:46.620 回答