【问题标题】:Detecting reboot programmatically in Windows Phone 8.1在 Windows Phone 8.1 中以编程方式检测重新启动
【发布时间】:2016-10-17 20:03:06
【问题描述】:

我有一个启动 DeviceUseTrigger 后台任务的 WP 8.1 运行时。问题是,每当手机重启时,这个任务显然会取消,但任务注册仍然存在。因此,当我下次启动我的应用程序时,后台任务 似乎 正在运行,而实际上并非如此。我想要某种方式来检测手机何时重新启动和/或以某种方式检测任务是否实际运行。我用来检查后台任务注册的代码如下:

foreach(IBackgroundTaskRegistration task in BackgroundTaskRegistration.AllTasks.Values)
        {
            if ((task as BackgroundTaskRegistration).Name == myTaskName)
            {
                Debug.WriteLine("Task is already running");
            }
        }

【问题讨论】:

    标签: c# windows-phone-8.1 background-process


    【解决方案1】:

    我能够以一种几乎令人尴尬的简单方式解决问题。手机关机时后台任务取消,所以我在后台任务中为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;
       }
    }
    

    非常不言自明,我只是创建一个空文本文件来创建一种任务取消日志,每次我的应用启动时,我都会检查文件是否存在。如果是,则重新启动任务并删除文件。

    【讨论】:

    • 在取消事件中创建文件时可能应该有“等待”。如果没有它,从技术上讲,延迟可能会在文件创建之前完成,可能不会发生,但以防万一。
    • 是的,你是对的。我正在从内存中输入代码,因为该项目不在我身边。无论如何,已更正。
    • 另外我认为在 LocalSettings 中使用特殊变量比创建文件更好。访问设置更快,并且是同步操作。
    猜你喜欢
    • 2017-02-26
    • 1970-01-01
    • 1970-01-01
    • 2018-12-26
    • 2015-04-10
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多