Несколько beginBackgroundTaskWithExpirationHandler - PullRequest
0 голосов
/ 01 ноября 2011

Если у нас есть долго выполняемая задача, мы можем гарантировать, что приложение не закроется, пока эта задача не будет завершена, используя следующий фрагмент кода:

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;
});

В моем случае, список приложений содержит запись для Application does not run in background, установленную на YES. Теперь у меня есть последовательная очередь (dispatch_queue_create(..., NULL)), которая регистрирует операции и выполняет их одну за другой. Пользователь может публиковать много задач одновременно, и выполнение всех из них может занять пару секунд 20-30.

Теперь мой вопрос, могу ли я использовать beginBackgroundTaskWithExpirationHandler с моей последовательной очередью? Если да, то какие-нибудь рекомендации относительно того, как? Я считаю, что мне придется поддерживать массив UIBackgroundTaskIdentifier?

1 Ответ

0 голосов
/ 24 ноября 2011

Насколько мне известно, если приложение не поддерживает фоновую обработку, приложение немедленно закрывается. Итак, запуск фоновых задач невозможен.

...