应用程序进入后台后如何继续计时器

我正在尝试执行一个简单的功能,该功能在应用程序的后台运行计时器。

简而言之

  1. 应用程序启动后,就会启动10秒计时器
  2. 看到确认计时器已在前台启动后,我锁定了设备
  3. 10秒后,在后台运行应用程序的情况下,我希望看到一条日志。目前,该功能在模拟器中有效,但在设备上不可用

下面的完整代码。 You can also download the app itself to try

咨询了诸如as this之类的流行答案(其中还包含有关Timer是否在后台实际运行的矛盾答案)之后,我并不完全是该主题上权威性的答案。

感谢您的帮助。

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        var timer : Timer?
        if timer == nil {
            NSLog("Timer started")
            timer = Timer.scheduledTimer(withTimeInterval: 10,repeats: true,block: {_ in NSLog("After 10 seconds show up") //this will not work on a device
                //Also,I get the error: Can't end BackgroundTask: no background task exists with identifier 1 (0x1),or it may have already been ended. Break in UIApplicationEndBackgroundTaskError() to debug.
            })
        }
    }
}
super___1987cl 回答:应用程序进入后台后如何继续计时器

这可能令人困惑,但是类似的问题确实可以回答问题。最重要的是,当应用程序进入后台时,该应用程序将完全暂停(包括计时器)。但是,您可以按照Extending Your App’s Background Execution Time中的说明,在暂停之前花一点时间。您会看到许多在线参考资料,在暂停之前,它们可以允许额外的三分钟后台执行,但是在iOS 13中,该时间进一步缩短到只有30秒。

现在,具有合法需要或后台执行的应用程序(例如,导航应用程序,VOIP应用程序,音乐播放应用程序等)可以请求特殊的后台执行模式(请参见About the Background Execution Sequence,但这些都不是仅用于使计时器在后台运行。

如果您想在将来的某个指定时间通知用户,请使用user notification服务。但是,不要只是尝试让您的应用在后台运行。


顺便说一句,尽管that link描述了该过程,但它们的代码片段却具有误导性。请参阅https://stackoverflow.com/a/23831862/1271826,以了解更现代的再现。

本文链接:https://www.f2er.com/2506339.html

大家都在问