2017-07-02 78 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秒後強制終止。

相關問題