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