在Windows Phone中阅读后台代理。所有指南都说我应该开始专门为代理创建一个新项目。这是一个要求吗?引用地点。
更大的问题是 - 框架如何找到实现计划任务的类? AFAIK,启动后台任务涉及调用ScheduledActionService.Add()
传递ScheduledAction
派生的对象作为参数。在这里我无处可见任何指向任务实现身份的指针。清单中也没有注册任务。
答案 0 :(得分: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开发应用程序时,此条目必须手动添加到清单中,这是一个常见问题,即在清单中没有此条目的情况下开发已发布的应用程序。
另一个有趣的发现,如果你在主项目中引用 - &gt; libraryA,引用另一个libraryB,只有libraryB实现ScheduledTaskAgent,然后Visual Studio不会将该条目添加到manifest中,因为它无法检查间接引用的项目 - 如果libraryA没有ScheduledTaskAgent实现,则库不被视为后台任务库。但是,您可以再次手动将库中的条目添加到清单中,它可以正常工作。
答案 1 :(得分:1)
清单中没有注册任务。
他们是。请参阅清单文件中的“BackgroundServiceAgent”元素:http://msdn.microsoft.com/en-us/library/windowsphone/develop/ff769509(v=vs.105).aspx
最后,我不知道是否需要创建一个单独的项目。通过在清单中手动添加行并指向主项目中的类,我看不出什么可能在技术上阻止后台代理工作。我没试过。尽管如此,将后台代理放在一个单独的程序集中可能很方便:代理的内存限制非常低,因此不必加载主项目及其依赖项可能可以节省几百KB的内存