2017-09-26 23 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秒后应该调用到期处理程序。你有一个几秒来处理任何清理/日志记录。