Что означает "UIBackgroundTaskInvalid"? - PullRequest
4 голосов
/ 31 декабря 2010

Я занимаюсь разработкой приложения для 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;» (строка 7, 16 в листинге 4-2).

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

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

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

Ответы [ 2 ]

10 голосов
/ 31 декабря 2010

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

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

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

(я не удивлюсь, если вторая строка не будет выполнена, пока приложение не будет предопределено, так как после завершения фонового выполнения приложение не получает ЦПвремя бежать. Хотя не проверял это)

0 голосов
/ 24 апреля 2017

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

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

[application endBackgroundTask:bgTask];

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

bgTask = UIBackgroundTaskInvalid; 

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

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