我正在制作一个应用程序,帮助人们跟踪工作间隔。
我需要的是,计时器应该运行至少30分钟,无论应用程序是在前景或背景。
func startFocus() {
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(Pomodoro.focusIntervalCounter), userInfo: nil, repeats: true)
}
func focusIntervalCounter() {
dynamic_focusIntervalSecond -= 1
focusDelegate?.updatingFocusCountingDown(timeStamp: seconds2Timestamp(intSeconds: dynamic_focusIntervalSecond), secondLeft: dynamic_focusIntervalSecond)
if dynamic_focusIntervalSecond == 0 {
timer.invalidate()
focusDelegate?.focusCountingDowndid(end: true)
}
}
focusIntervalCounter() should invalid the timer when the `dynamic_focusIntervalSecond` is 0.当程序处于前台时,它可以正常工作,但在屏幕关闭后,计时器只工作一段时间并停止。这是继续计时器计数的方法吗?
提前谢谢。
发布于 2017-06-21 04:34:43
不,您可以运行最多5分钟的后台任务,使用后台更新功能触发应用程序刷新,或者使用通知触发后台操作。在iOS中,无法保证任何代码在30分钟后都会在后台持续运行。本地通知将使您的代码能够在用户选择通知中的操作后运行。静默推送通知可以在后台打开收据中运行一些代码,但是需要一个internet连接,并且不能保证被传递。
有关更多信息,请参见此问题:背景中的iOS定时器
发布于 2017-06-21 05:51:50
不,不能在后台模式下运行计时器。您可以创建一个UIBackgroundTaskIdentifier,它将给您180秒的时间,正如我所观察到的,我不确定它是否会随操作系统版本的不同而变化。
您可以尝试将本地通知安排30分钟。
如果您使用推送通知、Airplay、Location、VOIP应用程序、蓝牙、新闻台、后台获取,可以启用后台模式,有关详细信息,请参阅本苹果开发人员文档BackgroundExecution。
发布于 2017-06-21 04:36:27
有些事情在后台是不可能的,您是否切换了您的项目以启用后台模式?你可以更多地了解它,这里
https://stackoverflow.com/questions/44666843
复制相似问题