Веб-представление iOS застревает, когда приложение переходит в фоновый режим и выходит на передний план

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

Любые решения или обходной путь для решения этой проблемы?

1 ответ

Используйте следующую функцию, чтобы создать таймер, который продолжает работать, когда приложение находится в фоновом режиме:

      func executeAfterDelay(delay: TimeInterval, completion: @escaping(()->Void)){
    backgroundTaskId = UIApplication.shared.beginBackgroundTask(
        withName: "BackgroundSound",
        expirationHandler: {[weak self] in
            if let taskId = self?.backgroundTaskId{
                UIApplication.shared.endBackgroundTask(taskId)
            }
        })
    
    let startTime = Date()
    DispatchQueue.global(qos: .background).async {
        while Date().timeIntervalSince(startTime) < delay{
            Thread.sleep(forTimeInterval: 0.01)
        }
        DispatchQueue.main.async {[weak self] in
            completion()
            if let taskId = self?.backgroundTaskId{
                UIApplication.shared.endBackgroundTask(taskId)
            }
        }
    }
}
Другие вопросы по тегам