如果使用 beginBackgroundTaskWithExpirationHandler,应用程序将被杀死 IOS
app getting killed if using beginBackgroundTaskWithExpirationHandler IOS
我在 applicationDidEnterBackground
委托方法中使用 beginBackgroundTaskWithExpirationHandler
方法来保持 NSTimer
保持 运行ning。但是如果长时间留在后台(在我的例子中是 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];
} ];
}
beginBackgroundTaskWithExpirationHandler
只是为了让您在应用程序离开前台后的几分钟内完成有限长度的任务。 iOS,故意不让您的应用程序 运行 永久处于后台,除非非常狭窄的情况(例如 VOIP、音频应用程序、导航应用程序)或狭窄的功能需求(显着更改位置服务、后台)取等)。但是你不能只是 运行 任意代码永远在后台。
有关选项的讨论,请参阅 应用编程指南 iOS 的 Background Execution 部分。
我在 applicationDidEnterBackground
委托方法中使用 beginBackgroundTaskWithExpirationHandler
方法来保持 NSTimer
保持 运行ning。但是如果长时间留在后台(在我的例子中是 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];
} ];
}
beginBackgroundTaskWithExpirationHandler
只是为了让您在应用程序离开前台后的几分钟内完成有限长度的任务。 iOS,故意不让您的应用程序 运行 永久处于后台,除非非常狭窄的情况(例如 VOIP、音频应用程序、导航应用程序)或狭窄的功能需求(显着更改位置服务、后台)取等)。但是你不能只是 运行 任意代码永远在后台。
有关选项的讨论,请参阅 应用编程指南 iOS 的 Background Execution 部分。