У меня есть приложение для 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 минуты из обратного вызова, который запускается, когдаприложение в фоновом режиме и телефон заблокирован?
Заранее спасибо,