0

我正在开发一个具有实时翻转磁贴的 Windows Phone 8 应用程序。我将创建一个计划代理(不是资源密集型的定期任务),它将使用本地数据更新动态磁贴。

整个应用程序不以任何方式连接到互联网,它只使用本地数据。所以推送通知是不可能的。

我需要在后台代理和/或前台应用程序启动时更新动态磁贴,以先发生者为准。

但是,如何确保前台应用程序和后台代理不会互相踩到对方的脚趾?我有两个主要选择来做到这一点:

  • 使用互斥锁(AFAIK 后台代理在不同的进程中运行,因此锁定(即监视器)是不可能的)。但我担心它会产生很高的性能成本(即获取和释放互斥锁)。

  • 当前台应用程序启动时,我总是会删除代理,完成它的工作并重新安排代理。因此,前台应用程序和后台代理程序之间不会有任何重叠的机会,但是整个添加/删除代理程序也可能很长,此外,用户可能会在删除代理程序之后但在添加之前关闭应用程序。 .

我真的在这两种方法之间左右为难,不知道哪种方法最好。

PS:您不能从代理自己的代码重新安排代理,对吗?

4

1 回答 1

3

互斥体

MSDN 文档为 Windows Phone 7 和 8正式推荐mutex 选项。

我已使用此选项,在后台代理和前台应用程序之间共享数据时没有遇到明显的性能问题,并且我以 WP7.1 为目标并在第一代和第二代 WP7 设备(LG E900 和 Lumia 800)上进行测试。

显然,在使用互斥锁时,关键是要尽可能短的锁定资源。当试图在后台代理中获取资源锁时,超时功能WaitHandle.WaitOne非常有用,因为后台代理只有 25 秒的时间运行。

注意:如果您仅针对 Windows Phone 8,或通过第二个项目/二进制文件,则可以使用不同的方法(为进程间通信命名的事件)。Peter Torr 在官方的 Windows Phone 开发者博客上写到了它


启用/禁用后台代理

您提到的第二种方法风险更大,因为我们不知道操作系统为添加或删除后台代理提供了什么保证 - 如果不是即时删除会发生什么?如果新更新的后台代理在前台应用程序运行时触发,会发生什么情况?等等


代理续约

后台代理无法自行更新 - 一旦添加,它们将最多运行两周,除非由前台应用程序更新。这将阻止后台代理为用户不再使用的应用程序运行。

于 2013-07-27T11:41:00.123 回答