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

问题描述:

我在应用程序中有一个计时器。要重现该问题,用户应该启动此计时器,然后将应用程序输入背景或关闭屏幕。该应用程序工作长达5分钟,然后被系统杀死。用户重新打开屏幕后,可以看到主屏幕。如果要再次启动应用程序,它将从头开始,但不会从用户在关闭屏幕之前的位置开始。iOS 10.3.2停止〜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电缆应用程序的帮助下测试此解决方案时,在后台甚至可以运行30分钟,但在大约4分钟的后台工作后,我可以在控制台中看到以下日志(这里是它的一部分):

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. 

但是如果与来自testflight下载的帮助下测试相同的身材,我得到的问题,我上面写的(与主屏幕的显示)。

此外,我尝试使用支持位于我的Info.plist文件中的UIBackgroundModes键中,它工作正确,但测试版应用程序审查被拒绝,出现«Guideline 2.5.4»问题。

请给我意见时,我可以使用时,应用程序是在您的应用程序自行终止闲置3分钟的背景来解决这个问题

+0

您的应用程序的目的是什么以及您使用了哪种背景模式? –

+1

@mag_zbc应用程序适用于音乐人。他们在计时器下排练。所以我需要它一直工作,除非它们会关闭它(即使屏幕关闭或应用程序在后台) 后台模式:后台获取。 另外我试过使用地理位置,为此我使用位置更新后台模式 – Simon

,你失去了你所有previliges和您的应用程序不能做任何事情,但听取获得通知(如果你有通知实施)

如果你想禁止你的应用程序终止,你可以让它在该背景下运行一个沉默的MP3,这样你的应用程序总是激活(消耗电池加上将被拒绝)。

但是,如果用户双击主页按钮并向上滑动您的应用程序(终止它)。没有什么可以做的!

希望这会有所帮助!