当应用程序在iOS上进入后台时继续操作

在我的应用程序中,我有一些NSOperation从一个在线数据库更新一些核心数据元素,有时更新需要一些分钟,当iPhone的屏幕locking,应用程序进入后台模式,并停止此更新,所以我有重新打开应用程序继续更新,所以我有很多堆栈溢出search,我已经find一些信息:

beginBackgroundTaskWithExpirationHandler 

这是从苹果的方法,让应用程序在后台模式下继续一些任务,我已经这样做:

 - (void)applicationDidEnterBackground:(UIApplication *)application { UIApplication *app = [UIApplication sharedApplication]; UIBackgroundTaskIdentifier bgTask; bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ [app endBackgroundTask:bgTask]; }]; } 

现在的应用程序继续在后台的任务,似乎一切正常,所以我的问题是,我使用这种方法是安全的? 还是有更好的模式?

谢谢

这不是你如何做到这一点。 任何你想在后台运行的代码都必须正确包装。 像这样的东西:

 - (void)someMethodToKeepRunningInBackground { UIBackgroundTaskIdentifier taskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^(void) { // Uh-oh - we took too long. Stop task. }]; // Perform task here if (taskId != UIBackgroundTaskInvalid) { [[UIApplication sharedApplication] endBackgroundTask:taskId]; } } 

你不要在UIApplicationDelegate applicationDidEnterBackground:方法中做任何事情。

包裹在“后台任务”调用中的任何任务将被允许在应用程序进入后台时继续运行。

这是非常重要的部分 – 任务最多只能获得10分钟。 如果它在10分钟后仍在运行,您的应用程序将被终止。 到期处理程序为您提供了几秒钟的时间,在应用程序不正常终止之前彻底结束任务。