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

yk9xbfzb  于 2023-02-06  发布在  iOS
关注(0)|答案(1)|浏览(375)

我在应用中添加了一个观察器,当应用进入后台模式时,它会进行监听。我是通过以下命令完成此操作的:

NotificationCenter.default.addObserver(self, selector: #selector(enterBackground), name: UIApplication.willResignActiveNotification, object: nil)

现在我希望我的选择器运行一个定时器。在后台调度。我的代码看起来像:

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

但是计时器并不是每秒钟都打印我的打印命令,只打印一次。
有人知道怎么做吗?热烈的问候!

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

hwamh0ep

hwamh0ep1#

简单的回答是,当你的应用在后台运行时,你不能让计时器运行。(停止获取CPU时间)几乎在用户切换到另一个应用程序后立即出现。Apple这样做既是为了节省电池,也是为了让最前面的应用程序响应更快。(当您被告知您的应用即将暂停时,您可以要求额外的后台时间,但上次我尝试的时候,额外的时间被限制在3分钟以内。Rob在下面报告说,在最近版本的iOS中,如果你要求的话,你只能得到大约30秒的额外时间。)仅允许有限数量的应用程序类型在后台运行超过几秒钟(例如,音乐播放器、分路段导航应用程序、VoIP应用程序)。
如果您需要跟踪某个事件发生后经过的时间,您应保存事件发生时的日期。当您的应用处于前台时,运行计时器,当计时器停止时,从保存的Date中减去当前Date,以获得经过的时间。
当你收到通知说你要去后台时,停止你的计时器。
当您返回前台时,重新启动计时器,以便它重新计算所用的时间。
附注:此重复项。此问题以及所有其他“我如何在后台运行计时器”问题的答案都是“你不能”。我提供了一个单独的答案,而不是将其作为重复项关闭,以解释为什么你不能以尝试的方式解决问题

相关问题