进入后台后继续执行NSOperation

时间:2014-07-24 17:55:26

标签: ios background nsoperation

我需要运行我长时间运行的任务,直到它完成,如果应用程序转到后台并不重要。 所以我有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];
    }];

我需要在后台运行吗?或者我错过了什么?

1 个答案:

答案 0 :(得分:0)

UIBackgroundTaskIdentifier只能给你一些额外的时间来完成你的任务,它会让你的应用程序保持活动状态最多10分钟,然后它会进入暂停状态,对于APp在后台运行只有几种可能的方法列出如下

播放音频: 接收位置更新: 执行有限长度的任务: 流程报亭套件下载: 提供IP语音(VoIP)服务:

如果你的应用程序使用其中任何一个,那么它将在10分钟后暂停,无论你的所有操作如何