繁体   English   中英

Swift:如何在后台运行计时器

[英]Swift: How to run timer in background

我在我的应用程序中添加了一个观察者,它在应用程序进入后台模式时进行监听。 我通过这个命令做到了: NotificationCenter.default.addObserver(self, selector: #selector(enterBackground), name: UIApplication.willResignActiveNotification, object: nil)

现在我希望我的选择器在后台运行 timer.scheduled。 我的代码看起来像:

   @objc func enterBackground() {
       Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { (timer) in
           print(self.secondsCount)
           self.secondsCount -= 1
       }
   }

但是计时器不会每秒打印我的打印命令。 就一次。

有人知道该怎么做吗? 热烈的问候!

和不! 这不是重复我阅读了很多答案和问题,但我没有得到答案!

简短的回答是,当您的应用程序在后台时,您不能运行计时器。 在用户切换到另一个应用程序后,您的应用程序几乎立即“暂停”(停止获取 CPU 时间)。 Apple 这样做既是为了节省电池电量,也是为了让最前面的应用程序更具响应性。 仅允许有限数量的应用程序类型在后台运行超过几分钟(例如音乐播放器、逐向导航应用程序、VoIP 应用程序。)

如果您需要跟踪某个事件后经过的时间量,您应该保存事件发生时的日期。 当您的应用程序处于前台时,运行一个计时器,当它关闭时,从保存的Date中减去当前Date以获得经过的时间。

当您收到通知您要进入后台时,请停止计时器。

当您返回前台时,重新启动计时器,以便它重新计算经过的时间量。

PS这重复的。 这个问题和所有其他“我如何在后台运行计时器”问题的答案是“你不能”。 我提供了一个单独的答案,而不是仅仅将其作为副本关闭,以解释为什么您无法以您尝试的方式解决问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM