我有一个WP 8.1运行时启动DeviceUseTrigger
后台任务。问题是,每当手机重新启动时,此任务显然会取消,但任务注册仍然存在。因此,当我在下次启动后台任务 时启动我的应用程序时,实际上它并非如此。我想要一些方法来检测手机重新启动和/或以某种方式检测任务是否实际运行。我用来检查后台任务注册的代码如下:
foreach(IBackgroundTaskRegistration task in BackgroundTaskRegistration.AllTasks.Values)
{
if ((task as BackgroundTaskRegistration).Name == myTaskName)
{
Debug.WriteLine("Task is already running");
}
}
答案 0 :(得分:2)
我能够以一种几乎令人尴尬的简单方式解决问题。当手机关机时后台任务取消,所以我在后台任务中为taskInstane.Canceled
事件附加了一个事件处理程序,并且只添加了两行:
StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync("TaskCancelling.txt" CreateCollisionOption.OpenIfExists);
deferral.Complete();
然后,在前台应用程序中,只要应用程序启动,就会运行以下代码:
foreach(IBackgroundTaskRegistration task in BackgroundTaskRegistration.AllTasks.Values)
{
if ((task as BackgroundTaskRegistration).Name == myTaskName)
{
if (await IsFilePresentInLocalDirectory("TaskCancelling.txt"))
{
//Task registration is present, but task isn't actually running.
//Unregister the useless task
(task as BackgroundTaskRegistration).Unregister(true);
//Delete the file
StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync("TaskCancelling.txt");
await file.DeleteAsync();
//Relaunch the DeviceUseTrigger task
RelaunchBackgroundTask();
}
}
}
private async Task<bool> IsFilePresentInLocalDirectory(string fileName)
{
try
{
StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync(fileName);
return true;
}
catch (Exception exc)
{
return false;
}
}
非常不言自明,我只是创建一个空文本文件来创建一种任务取消日志,每次我的应用程序启动时,我都会检查文件是否存在。如果是,则重新启动任务并删除文件。