Отправленная GCD операция не выполняется, когда приложение находится в фоновом режиме - PullRequest
3 голосов
/ 22 марта 2012

Я запускаю метод, который, по сути, представляет собой бесконечный цикл, используя dispatch_queue_create, а затем dispatch_async (и затем кодовый цикл находится внутри отправленного блока).

Цикл работает отлично.Однако, когда приложение становится фоновым, оно приостанавливается.Затем он перезапускается, когда приложение выходит на передний план.

Как я могу предотвратить это?Я искал здесь , но кажется, что приоритет - это не та вещь, которую я могу выбрать.

1 Ответ

5 голосов
/ 22 марта 2012

Используйте метод - [UIApplication beginBackgroundTaskWithExpirationHandler:] для запуска фоновой задачи. ОС даст вам десять минут и вызовет блок expirationHandler, когда он закончится.

Этот метод возвращает UIBackgroundTaskInvalid , если устройство не может выполнить код в фоновом режиме или идентификатор задачи, который необходимо использовать для его завершения в противном случае.

Вы можете (и должны) завершить его раньше, вызвав - [UIApplication endBackgroundTask];

Вероятно, вы можете запустить задачу в начале вашего блока и завершить ее по окончании, если это бесконечный цикл, просто запустите задачу в методе applicationWillResignActive и завершите ее в applicationDidBecomeActive. Но помните, у вас есть только десять минут , чтобы иметь больше времени, чтобы ваше приложение могло использовать местоположение, аудио или voip.

...