Фоновая задача iOS не остается активной, если она запущена, когда телефон заблокирован (выключен) - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть приложение для iOS, которое взаимодействует с устройствами BLE.Фоновый режим Bluetooth LE работает так, что приложение может подключаться и взаимодействовать с устройствами BLE, даже если оно находится в фоновом режиме.Когда подключено устройство BLE, приложение выполняет код в фоновом режиме, отвечая на обратные вызовы, связанные с BLE, но после отключения устройства BLE приложение больше не может запускать код в фоновом режиме (приложение остается активным только в течение нескольких секунд после отключения устройства BLE).

Мне нужен способ выполнения задачи конечной длины (примерно 1-2 минуты) после отключения устройства BLE .

Чтение AppleДокументация Я пытался использовать метод beginBackgroundTaskWithExpirationHandler: .При вызове этого метода приложение должно запросить дополнительное время выполнения (примерно 3 минуты).

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

Я попытался зарегистрировать фоновую задачу, вызвав beginBackgroundTaskWithExpirationHandler в ответ на обратный вызов отключения BLE, и я обнаружил странное поведение, которое зависит от того, заблокирован телефон или нет, когда вызывается beginBackgroundTaskWithExpirationHandler:

  • Если телефон не заблокирован (т. Е. Экран включен, приложение может отображаться как в фоновом режиме, так и в фоновом режиме), когда вызывается beginBackgroundTaskWithExpirationHandler, фоновая задача работает как положено и остаетсяв течение примерно 3 минут, если приложение затем переходит в фоновый режим и экран отключается.
  • Если телефон заблокирован (экран выключен), когда beginBackgroundTaskWithExpirationHandler установленвызывается, фоновая задача не остается активной в фоновом режиме, когда экран выключен, и возобновляется при повторном включении экрана

(пробовал с iPhone 6, iPhone 8 Plus, iPhone 5s всес iOS 12.1.4)

Подход, который я использую, очень похож на описанный здесь , я также нашел здесь другую подобную проблему.

Это предназначенное поведение для фоновых задач?Приостанавливает ли ОС фоновую задачу, если она запущена, когда телефон находится в заблокированном состоянии?

Есть ли другой способ запустить задачу конечной длины с продолжительностью 1-2 минуты из обратного вызова, который запускается, когдаприложение в фоновом режиме и телефон заблокирован?

Заранее спасибо,

1 Ответ

0 голосов
/ 03 апреля 2019

Согласно :

application(_:performFetchWithCompletionHandler:)

Когда вызывается этот метод, ваше приложение имеет до 30 секунд времени настенного времени для выполнения операции загрузки и вызова указанного блока обработчика завершения. На практике ваше приложение должно вызывать блок обработчика завершения как можно скорее после загрузки необходимых данных. Если вы вовремя не вызовете обработчик завершения, ваше приложение будет закрыто. Что еще более важно, система использует истекшее время для расчета энергопотребления и стоимости данных для фоновых загрузок вашего приложения. Если вашему приложению требуется много времени для вызова обработчика завершения, ему может быть предоставлено меньше возможностей для получения данных в будущем.

Таким образом, у вас есть 30 секунд , чтобы завершить любую задачу в фоновом режиме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...