当应用程序在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分钟后仍在运行,您的应用程序将被终止。 到期处理程序为您提供了几秒钟的时间,在应用程序不正常终止之前彻底结束任务。