Таймеры не работают, когда экран выключен / устройство заблокировано в iOS - PullRequest
0 голосов
/ 02 мая 2018

Приложение находится в фоновом режиме, и оно получает обратный вызов при отключении от устройства BLE, после чего приложение должно некоторое время ждать (1 минуту), а затем выполнить какой-то фрагмент кода. Приложение работает должным образом даже в фоновом режиме, если экран включен. Но если экран выключен, таймер не работает, и приложение не работает должным образом.

Это код в AppDelegate для запуска таймера в фоновом режиме:

func startTimerWith(timeInterval: TimeInterval) {
    registerBackgroundTask()
    timer = Timer.scheduledTimer(withTimeInterval: timeInterval, repeats: false, block: { (timer) in
        NotificationCenter.default.post(name: NSNotification.Name(rawValue: "Time"), object: nil)
        self.endBackgroundTask()
    })
}

func registerBackgroundTask() {
    backgroundTask = UIApplication.shared.beginBackgroundTask(expirationHandler: {
        self.endBackgroundTask()
    })
}

func endBackgroundTask() {
    print("Background task ended.")
    UIApplication.shared.endBackgroundTask(backgroundTask)
    backgroundTask = UIBackgroundTaskInvalid
    timer?.invalidate()
    timer = nil
}

При отключении от устройства BLE я запускаю таймер, регистрируясь в фоновом режиме:

func disconnected(_ peripheral: CBPeripheral, with error: Error?) {
    print("DISCONNECTED!!!")
    AppDelegate.sharedApp().startTimerWith(timeInterval: TimeInterval(TIME))
    BLEDeviceHandler.sharedInstance.handleBLEDevice(connectedPeripheral!)
} 

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

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

0 голосов
/ 02 мая 2018

Здесь важно две точки:

  1. Таймер не работает, если приложение находится в фоновом режиме более 10 минут . У меня был точный сценарий, где я должен был выполнить действие в фоновом режиме. Я узнал, что через 10 минут таймер не Работа.
  2. Таймеры не работают, когда устройство заблокировано. Приложение блокируется сразу после блокировки устройства. Это для iOS> = 7.0
...