Что означает "UIBackgroundTaskInvalid"?
Я разрабатываю приложение для iPhone, которое работает в фоновом режиме (iOS4), и ссылаюсь на "Завершение задачи конечной длины в фоновом режиме", написанное Apple, по следующему адресу
Тогда я смог реализовать фоновые задачи.
(Конечно, я вижу, что приложение имеет ограничение по времени 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;