多个beginBackgroundTaskWithExpirationHandler

时间:2011-11-01 05:15:37

标签: ios cocoa-touch grand-central-dispatch

如果我们有一个长时间运行的任务,我们可以通过使用以下代码确保应用程序不会在该任务完成之前退出:

UIApplication *app = [UIApplication sharedApplication];    

bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
    // Clean up any unfinished task business by marking where you.
    // stopped or ending the task outright.
    [app endBackgroundTask:bgTask];
    bgTask = UIBackgroundTaskInvalid;
}];

// Start the long-running task and return immediately.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{

    // Do the work associated with the task, preferably in chunks.

    [app endBackgroundTask:bgTask];
    bgTask = UIBackgroundTaskInvalid;
});

在我的情况下,应用程序plist包含Application does not run in background设置为YES的条目。现在,我有一个串行队列(dispatch_queue_create(..., NULL)),它记录操作并逐个执行。用户可以一次发布许多任务,并且可能需要几秒钟20-30才能完成所有任务。

现在我的问题是,我可以在我的串行队列中使用beginBackgroundTaskWithExpirationHandler吗?如果是这样,任何建议如何?我相信我必须保持一组UIBackgroundTaskIdentifier

1 个答案:

答案 0 :(得分:0)

据我所知,如果应用程序不支持后台处理,则应用程序立即退出。因此,无法启动后台任务。