BackgroundTask Clarification

本文关键字:Clarification BackgroundTask | 更新日期: 2023-09-27 18:14:10

首先,让我说我已经做了我的研究。我花了大约一天半的时间看视频、阅读msdn、测试和实验。我还没有解决这个问题。尽管我做了很多研究,但这将是一个相当广泛的问题,所以我为此道歉。这可能部分是由于Windows Phone 8.1的新特性。

我的目标是每小时增加一次int,即使应用程序没有运行。显然,最好的方法是通过TimeTriggerBackgroundTask。我已经在我的解决方案中创建了名为BackgroundTaskProject的单独项目(Windows Runtime Component)。我把它的类重命名为BackgroundTaskClass。我从我的主要项目中引用了BackgroundTaskProject

BackgroundTaskClass中,我实现了IBackgroundTask及其Run方法。问题1:如果我所要做的就是在我的主要项目中增加一个值,在这个方法中有什么用吗?如果有,那是什么?

我已经复制并粘贴了我的RegisterBackgroundTask方法从MSDN到BackgroundTaskClass

在我的主项目中,我创建了TimeTrigger。我通过BackgroundTaskClass中的static RegisterBackgroundTask方法注册了我的BackgroundTask。由于await/async方法,我做了一些更改,使BackgroundTask被分配给Task<BackgroundTaskRegistration>类型的变量。

最后的问题:我在哪里说myInt++让它每小时运行一次?(myInt是我的主要项目)

我可以根据要求提供具体的代码或回答问题,但这里有一些你可能需要的:

主项目/类:

TimeTrigger hourlyTrigger = new TimeTrigger(60, false);
Task<BackgroundTaskRegistration> task = BackgroundTaskProject.BackgroundTaskClass.RegisterBackgroundTask("BackgroundTaskProject.BackgroundTaskClass", "Number Incrementer", hourlyTrigger, null);

In BackgroundTaskClass:

Copy and pasted from MSDN (http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh977055.aspx and http://msdn.microsoft.com/en-us/library/windows/apps/xaml/jj553413.aspx)

BackgroundTask Clarification

我不是很精通Windows 8手机,但我可以看出你有一个基本的误解:

问题是您假设某些东西将始终保持运行,但事实并非如此。

你的主应用程序可能在任何时候挂起,在这一点上,你应该保存任何数据,你需要恢复应用程序->也就是说,一旦挂起你的应用程序消失了,它不再在内存中,所以没有myInt增加。

你的后台任务甚至更糟:它被从内存中移除一旦它完成运行方法的执行->也就是说,如果你在后台任务中增加一个myInt,那么下一次你的后台任务被触发时,它将被设置为它的初始值,因为它是一个新的后台任务。

正确的做法是:当你的应用程序第一次启动时,将时间和myInt的初始值保存到应用程序存储中。现在,当您需要计算myInt的值时,只需根据这些初始值动态计算即可。