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