后台快速计时器

Posted

技术标签:

【中文标题】后台快速计时器【英文标题】:Swift timer in background 【发布时间】:2018-04-26 06:54:16 【问题描述】:

我通过地理围栏的触发器在 ios 中创建了一个后台任务。在这种背景下,我启动了一个计时器来倒计时以使该任务超时。但是,此计时器无法正常工作,可能会在 10 秒后暂停,并在我将应用程序置于前台时恢复。

我需要帮助才能让这个计时器在 10 分钟内正常工作。 这是我的代码

@objc func timeoutChecking(_ timer: Timer) 
    print("time \(self.currentTime)")
    if self.currentTime != TIME_SEARCH 
        self.currentTime += 1
    
    else 
        // Time out
        self.stopChecking()
    

【问题讨论】:

发生这种情况是因为您在 main 线程中触发了计时器 【参考方案1】:

不可能在几秒钟后在后台连续运行计时器,苹果可能会丢弃计时器。

你可以做一件事,取一个全局变量在applicationDidEnterBackground 中添加设置当前时间,applicationWillEnterForeground 在此方法中检查以当前系统时间和存储的先前时间比较两个时间并得到它们之间的差异,检查是,

if self.currentTime != TIME_SEARCH 
        self.currentTime += 1
    
    else 
        // Time out
        self.stopChecking()

您必须在这里查看if self.currentTime > TIME_SEARCHif self.currentTime < TIME_SEARCH,这样您才能获得完美的结果。 :)

【讨论】:

以上是关于后台快速计时器的主要内容,如果未能解决你的问题,请参考以下文章

jdk中的定时器

Timer TimerTask CountDown 计时器 API

unity 后台计时器实现

计时器:如何在后台保持计时器处于活动状态

防止计时器在后台模式下暂停

倒数计时器停止在后台运行