Swift 3 – 如何使计时器在后台工作

我试图做一个应用程序,可以使一个计时器在后台运行。

这是我的代码:

let taskManager = Timer.scheduledTimer(timeInterval: 10, target: self, selector: #selector(self.scheduleNotification), userInfo: nil, repeats: true) RunLoop.main.add(taskManager, forMode: RunLoopMode.commonModes) 

上面的代码将执行一个将调用本地通知的函数。 这个工程当应用程序在前台,我怎么能使它在后台工作?

我试图把几条打印线,我看到,当我最小化(按下主页button)的应用程序,计时器停止,当我回到应用程序,它恢复。

我想让计时器仍然在后台运行。 有没有办法做到这一点?

这是我想要发生的事情:

运行应用程序 – >等待10秒 – >收到通知 – >等待10秒 – >收到通知 – >然后回到等待并再次收到

发生在前景时。 但不在后台。 请帮助。

定时器只能在以下两种情况下才能在后台运行:

  • 您的应用程序出于其他原因在后台运行。 (大多数应用程序不会;大多数应用程序在进入后台时被暂停)。并且:

  • 计时器已经在应用程序进入后台运行。

正如其他人指出的那样,Timer不能在后台运行一个方法。 你可以做什么,而不是使用while循环里面的asynchronous任务

 DispatchQueue.global(qos: .background).async { while (shouldCallMethod) { self.callMethod() sleep(1) } } 

计时器将不能在后台工作。 对于后台任务,你可以检查下面的链接…

https://www.raywenderlich.com/143128/background-modes-tutorial-getting-started