我需要运行我长时间运行的任务,直到它完成,如果应用程序转到后台并不重要。 所以我有NSOperation的子类,我把这个NSOperation添加到了NSOperationQueue。在NSOperation的主要功能中,我有:
- (void)main {
UIApplication *app = [UIApplication sharedApplication];
UIBackgroundTaskIdentifier taskId = 0;
taskId = [app beginBackgroundTaskWithExpirationHandler:^(void) {
[app endBackgroundTask:taskId];
}];
NSManagedObjectContext *searchContext = [NSManagedObjectContext createSearchTempContext];
[searchContext performBlockAndWait:^{
NSArray *array = //Get Array data from CoreData;
if (array.count > 0) {
//Long running task
}
if (taskId != UIBackgroundTaskInvalid) [app endBackgroundTask:taskId];
}];
我需要在后台运行吗?或者我错过了什么?
答案 0 :(得分:0)
UIBackgroundTaskIdentifier只能给你一些额外的时间来完成你的任务,它会让你的应用程序保持活动状态最多10分钟,然后它会进入暂停状态,对于APp在后台运行只有几种可能的方法列出如下
播放音频: 接收位置更新: 执行有限长度的任务: 流程报亭套件下载: 提供IP语音(VoIP)服务:
如果你的应用程序使用其中任何一个,那么它将在10分钟后暂停,无论你的所有操作如何