2017-07-02 63 views
0

我使用的后台任务为无效。这项任务工作正常,但会在某些时候强行关闭。我有测试应用程序,并保持打开整个下午,如果我删除了代码中的后台任务,崩溃没有发生。Xamarin的iOS:BackgroundTask,我是否需要设定任务目标

后,我仔细地看了看,大概缺少一行代码分配任务的对象无效。

var siteId = Settings.CurrentSiteId; 
     if (siteId > 0 && !(new EntityBLL().IsInitial(siteId))) 
     { 
      var task = nint.MinValue; 
      task = UIApplication.SharedApplication.BeginBackgroundTask("bgEntityDownload",() => 
      { 
       ServerEntity.TerminateAutoDownload(true); 
       UIApplication.SharedApplication.EndBackgroundTask(task); 
       task = UIApplication.BackgroundTaskInvalid; 

       completionHandler?.Invoke(UIBackgroundFetchResult.NewData); 
      }); 

      AppLogger.Instance.AddLog(AppLogLevel.Information, 
             nameof(TimerDownload), 
             nameof(DownloadEntityFromServer), 
             "Background download starts", ""); 

      var result = await ServerEntity.AutoDownload(siteId); 
      UIApplication.SharedApplication.EndBackgroundTask(task); 
      task = UIApplication.BackgroundTaskInvalid; 

      completionHandler?.Invoke(UIBackgroundFetchResult.NewData); 
     } 

的这里行:

var result = await ServerEntity.AutoDownload(siteId); 
      UIApplication.SharedApplication.EndBackgroundTask(task); 
      task = UIApplication.BackgroundTaskInvalid; 

是与任务线= UIApplicaition.BackgroundTaskInvalid完成工作后需要。

+0

它不是“必需的”。您可以将该值用作标记​​,以便在代码中的其他位置知道后台任务已结束。在Xcode下运行时,您有无限的后台执行时间。正常运行时,应用程序在终止之前只有180秒的时间。 – Paulw11

回答

0

它不是必需的,但一个好的做法,允许系统花费在不同的进程资源。您的后台任务将在180秒后强制终止。

相关问题