【问题标题】:Does WP7 background agent have to be in a separate DLL?WP7 后台代理是否必须在单独的 DLL 中?
【发布时间】:2013-11-14 21:18:08
【问题描述】:

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

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

【问题讨论】:

  • Neither are tasks registered in the manifest. 他们是。查看清单文件中的“BackgroundServiceAgent”元素:msdn.microsoft.com/en-us/library/windowsphone/develop/…
  • 对。这回答了这两个问题。我想知道为什么它没有记录在多任务下。它也不在清单编辑 GUI 中。
  • 最后,我不知道是否需要创建一个单独的项目。通过在清单中手动添加该行并指向主项目中的一个类,我看不出有什么可以在技术上阻止后台代理工作。不过我没试过。尽管如此,将后台代理放在单独的程序集中还是很方便的:代理的内存限制非常低,因此不必加载主项目及其依赖项可能会节省数百 KB 的内存
  • 点了。给个答案,我会接受的。

标签: windows-phone background-agents


【解决方案1】:

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

还需要使用“添加参考”将其添加到您的主应用项目中。
具有后台任务的项目也需要有类,即 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不会将该entry添加到manifest中,因为它不能间接检查引用的项目 - 如果 libraryA 没有 ScheduledTaskAgent 实现,则该库不被视为后台任务库。但是,您可以再次手动将 libraryA 的条目添加到清单中,它会正常工作。

【讨论】:

  • 清单的自动修改并没有发生在我身上——无论是在真正的解决方案上还是在测试解决方案上。不过没关系,手动步骤很简单。
  • 注入的标签并没有添加到解决方案中的文件中,而是添加到创建的XAP包中的清单文件中,只需查看即可。
【解决方案2】:

清单中也没有注册任务。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    • 2019-11-05
    • 2019-11-29
    • 1970-01-01
    • 2010-10-14
    相关资源
    最近更新 更多