如果使用beginBackgroundTaskWithExpirationHandler IOS,app会被杀死

时间:2015-02-23 12:55:33

标签: ios background nstimer

我在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];
    } ];

}

1 个答案:

答案 0 :(得分:2)

beginBackgroundTaskWithExpirationHandler仅用于让您在应用程序离开前景后几分钟内完成有限长度的任务。 iOS非常谨慎,不会让您的应用永久运行在背景中,除非是非常狭窄的情况(例如VOIP,音频应用,导航应用)或者是狭隘的功能需求(重要的更改位置服务,后台获取等)。但是你不能只在后台运行任意代码。

有关这些选项的讨论,请参阅 iOS应用程序编程指南的Background Execution部分。