2017-07-02 12 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秒後に強制終了されます。

関連する問題