2017-09-26 21 views
1

我可以使用iOS模擬器模擬後臺抓取。是否有可能模擬到期,以便它可以調用到期處理程序?我試圖使用無限循環並在模擬器上作爲背景獲取運行,但似乎沒有觸發它。Xamarin表單:iOS如何模擬後臺抓取過期

task = UIApplication.SharedApplication.BeginBackgroundTask("bgEntityDownload",() => 
      { 
       AppLogger.Instance.AddLog(AppLogLevel.Information, 
             nameof(BgProcess), 
             nameof(DownloadEntityFromServer), 
             "Background Fetch Expired", ""); 
       App.CurrentDataStatus.HasSync = new EntityQueueBLL().HasData(siteId); 
       UIApplication.SharedApplication.EndBackgroundTask(task); 
       task = UIApplication.BackgroundTaskInvalid; 
       System.Diagnostics.Debug.WriteLine("Ending ....."); 
       completionHandler?.Invoke(UIBackgroundFetchResult.NewData); 
      }); 
+0

開始調試您的應用程序,一旦它運行後,將其放置到背景中(主屏幕按鈕,在精神設備上或硬件/家中在Sim上),然後通過IDE中的運行/背景獲取調用背景獲取。你的過期處理程序應該在約30秒後被調用(假設你沒有從PerformFetch方法返回(通過異步Task.Delay或其他東西掛起它) – SushiHangover

+0

我循環它2小時,但應用程序死亡,而不是調用處理器當我放置了一個bulletpoint – LittleFunny

+0

對不起,它使用你的Task.Delay方法,我不知道它應該在調用處理程序之前終止多長時間......當我放置斷點時,調試器將達到該點並在後來的應用程序被殺害,看起來它不是最後一個很長的權利 – LittleFunny

回答

0

這裏有一個例子我的應用程序之一的:

public async override void PerformFetch(UIApplication application, Action<UIBackgroundFetchResult> completionHandler) 
{ 
    var result = UIBackgroundFetchResult.NoData; 
    try 
    { 
     await Task.Run(async() => 
     { 
      var iOSTaskId = UIApplication.SharedApplication.BeginBackgroundTask("MyBackgroundTask", ExpirationHandler); 
      //result = await BackgroundFetchBoxOfficeTicketResults(); 
      await Task.Delay(60 * 1000); 
      result = UIBackgroundFetchResult.NewData; 
      UIApplication.SharedApplication.EndBackgroundTask(iOSTaskId); 
     }); 
    } 
    catch // Fetch Errors are Reported via analytics system within BackgroundFetchBoxOfficeTicketResults 
    { 
     result = UIBackgroundFetchResult.Failed; 
    } 
    completionHandler(result); 
} 

void ExpirationHandler() 
{ 
    //Report(ProgID, PerFormFetchFailedID, DeviceID, $"User:{UserID}, Network:{NetworkType}"); 
    Console.WriteLine("beginBackgroundTaskWithName:expirationHandler: called..."); 
} 
  • 開始調試您的應用程序

  • 將其放入後臺

    • 通過首頁按鈕,無論是在物理設備還是Hardware/Home上SIM
  • 調用背景經由Run/Simulate iOS Background Fetch在IDE取。

約30秒後應該調用到期處理程序。你有一個幾秒來處理任何清理/日誌記錄。