Что означает "UIBackgroundTaskInvalid"?

Я разрабатываю приложение для iPhone, которое работает в фоновом режиме (iOS4), и ссылаюсь на "Завершение задачи конечной длины в фоновом режиме", написанное Apple, по следующему адресу

http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html#//apple_ref/doc/uid/TP40007072-CH5

Тогда я смог реализовать фоновые задачи. (Конечно, я вижу, что приложение имеет ограничение по времени 10 минут.) Однако я все еще не могу понять, что "bgTask = UIBackgroundTaskInvalid;"(Line7,16 из Листинга 4-2) означает.

По моему мнению, линия, показанная выше, никогда не была достигнута. Потому что "endBackgroundTask:"до этого и фоновая задача будет завершена. На самом деле, когда я проверял с помощью отладчика xcode, эта мысль могла быть верной и не доходить до Line7, 16.

Если так, эта линия избыточна? Или есть какая-то причина, чтобы быть написанным?

Буду признателен за любую помощь по этому поводу. Заранее спасибо.

2 ответа

Код в блоке вызывается, если заканчивается 10 минут до того, как приложение выполнит свою фоновую задачу.

Код в этом блоке должен вызывать endBackground: указать, что ситуация подтверждена и принята приложением - если это не так, заявка будет прекращена. Обратите внимание, что вызов метода не завершает приложение - он просто указывает ОС, что выполнение фоновой задачи завершено.

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

(Я не удивлюсь, если вторая строка не будет выполнена до тех пор, пока приложение не будет предопределено, поскольку после завершения фонового выполнения приложение не запускает процессорное время. Однако это не проверялось)

Ключ к пониманию заключается в том, что вместо обработчика завершения у вас есть обработчик срока действия. Эта строка выполняется только как "очистка" вашего кода и занимает слишком много времени.

Чтобы очистить его, нужно убить / убить / завершить фоновую задачу. Итак, сначала он должен остановить это:

[application endBackgroundTask:bgTask];

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

bgTask = UIBackgroundTaskInvalid; 

Причина, по которой вы видите это дважды в коде, заключается в том, что либо:

  • Он успешно работает в фоновом режиме и заканчивается в диспетчерском блоке... так что вам нужно сообщить приложению, что, эй, я закончил.
  • Вы не заканчиваете в фоновом режиме, но приложение как раз время! Ты должен идти... убирать за собой, делая [application endBackgroundTask:bgTask]; + bgTask = UIBackgroundTaskInvalid;
Другие вопросы по тегам