我在beginBackgroundTaskWithExpirationHandler
委托方法中使用applicationDidEnterBackground
方法来保持NSTimer
继续运行。但是如果长时间留在背景中(在我的情况下为7-10分钟),应用程序会在很长一段时间后被杀死。我不希望我的应用程序被杀死,而且我希望计时器在后台运行。我该如何摆脱这个问题。以下是我在applicationDidEnterBackground
方法
- (void)applicationDidEnterBackground:(UIApplication *)application {
if ([application respondsToSelector:@selector(setKeepAliveTimeout:handler:)]) {
[application setKeepAliveTimeout:600 handler:^{
DDLogVerbose(@"KeepAliveHandler");
// Do other keep alive stuff here.
}];
}
/*
* The following code is used to make the app running in background state as certain features
* (eg: NSTimer) doesn not run if its in background or if the phone is locked
*/
UIBackgroundTaskIdentifier locationUpdater =[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
[[UIApplication sharedApplication] endBackgroundTask:locationUpdater];
} ];
}
答案 0 :(得分:2)
beginBackgroundTaskWithExpirationHandler
仅用于让您在应用程序离开前景后几分钟内完成有限长度的任务。 iOS非常谨慎,不会让您的应用永久运行在背景中,除非是非常狭窄的情况(例如VOIP,音频应用,导航应用)或者是狭隘的功能需求(重要的更改位置服务,后台获取等)。但是你不能只在后台运行任意代码。
有关这些选项的讨论,请参阅 iOS应用程序编程指南的Background Execution部分。