簡體   English   中英

當屏幕關閉/設備在iOS中被鎖定時,計時器未運行

[英]Timers not running when screen is turned off / device is locked in iOS

該應用程序處於后台,它在與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!)
} 

這里有兩點至關重要:

  1. 如果應用程序處於后台狀態超過10分鍾,則計時器不起作用。 我有一個確切的場景,我必須在后台執行一些操作。 我發現10分鍾后,計時器無法正常工作。
  2. 設備鎖定時,計時器不起作用。 設備鎖定后,應用會立即暫停。 這適用於iOS> = 7.0

Bug是固定的,因為應用程序使用位置服務,但我忘了在應用程序處於后台時允許更新位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM