iOS 10.3.2在约5分钟后停止应用程序后台工作

iOS 10.3.2在约5分钟后停止应用程序后台工作,ios,objective-c,iphone,background,kill-process,Ios,Objective C,Iphone,Background,Kill Process,我在应用程序中有一个计时器。若要重现问题,用户应启动此计时器,然后将应用程序输入后台或关闭屏幕。该应用程序最多工作5分钟,然后被系统终止。用户重新打开屏幕后,可以看到主屏幕。如果要再次启动应用程序,它会从头开始,但不会从用户关闭屏幕前的位置开始 我尝试在AppDelegate中使用以下解决方案解决此问题: - (void)methodToRepeatEveryOneSecond { if (self.flag) { dispatch_queue_t q_background = dis

我在应用程序中有一个计时器。若要重现问题,用户应启动此计时器,然后将应用程序输入后台或关闭屏幕。该应用程序最多工作5分钟,然后被系统终止。用户重新打开屏幕后,可以看到主屏幕。如果要再次启动应用程序,它会从头开始,但不会从用户关闭屏幕前的位置开始

我尝试在AppDelegate中使用以下解决方案解决此问题:

- (void)methodToRepeatEveryOneSecond
{
  if (self.flag) {
   dispatch_queue_t q_background = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);
   double delayInSeconds = 1.0;
   dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
   dispatch_after(popTime, q_background, ^(void){
     [self methodToRepeatEveryOneSecond];
   });
  }
}
-(void)applicationDidEnterBackground:(UIApplication *)application{
  NSUserDefaults* def = [[NSUserDefaults alloc] init];
  if ( [[def valueForKey:@"status" ] boolValue]) {
    self.flag = true;
    dispatch_queue_t q_background = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);
    dispatch_async(q_background, ^{
      [self methodToRepeatEveryOneSecond];
    });
  }
}
-(void)applicationWillEnterForeground:(UIApplication *)application{
  self.flag = false;
}
但该应用程序在后台运行约5分钟后仍停止工作

当我在USB cable app的帮助下测试此解决方案时,do在后台可以工作30分钟,但在后台工作大约4分钟后,我可以在控制台中看到以下日志(这是其中的一部分):

但是如果要通过从testflight下载来测试相同的构建,我会遇到上面提到的问题(显示主屏幕)

此外,我还尝试在Info.plist文件中的UIBackgroundModes键中使用位置支持,它工作正常,但beta app review因«指南2.5.4»问题而被拒绝


请给我一些建议,我可以用什么来解决这个问题当应用程序在后台时,你的应用程序会自动终止3分钟的不活动状态,你失去了所有的权限,你的应用程序除了侦听获取通知之外什么都做不了(如果你已经实现了通知)

若你们试图禁止你们的应用终止,你们可以让它在那个背景下运行一个无声的mp3,这样你们的应用就会一直处于活动状态(耗尽电池电量会被拒绝)

但如果用户双击home(主页)按钮并刷起你的应用程序(终止它)。你无能为力


希望这有帮助

你的应用程序的用途是什么?你使用了哪种背景模式?@mag_zbc应用程序是为音乐家设计的。他们定时排练。所以我需要它一直工作,除非他们关闭它(即使屏幕关闭或应用程序处于后台)后台模式:后台获取。我还尝试使用地理定位,为此我使用了位置更新背景模式
2017-07-26 17:43:14.496379+0300 MusicMonitor[486:339431] Can't endBackgroundTask: no background task exists with identifier 16df86530, or it may have already been ended. Break in UIApplicationEndBackgroundTaskError() to debug.
2017-07-26 17:43:14.496493+0300 MusicMonitor[486:339431] Can't endBackgroundTask: no background task exists with identifier 16e1b6530, or it may have already been ended. Break in UIApplicationEndBackgroundTaskError() to debug.
2017-07-26 17:43:14.496790+0300 MusicMonitor[486:339431] Can't endBackgroundTask: no background task exists with identifier 16e012530, or it may have already been ended. Break in UIApplicationEndBackgroundTaskError() to debug.
2017-07-26 17:43:14.497065+0300 MusicMonitor[486:339431] Can't endBackgroundTask: no background task exists with identifier 16df86530, or it may have already been ended. Break in UIApplicationEndBackgroundTaskError() to debug.
2017-07-26 17:43:14.497188+0300 MusicMonitor[486:339431] Can't endBackgroundTask: no background task exists with identifier 16e242530, or it may have already been ended. Break in UIApplicationEndBackgroundTaskError() to debug.
2017-07-26 17:43:14.497476+0300 MusicMonitor[486:339431] Can't endBackgroundTask: no background task exists with identifier 16e242530, or it may have already been ended. Break in UIApplicationEndBackgroundTaskError() to debug.