运行 每 15 秒一个线程,即使应用程序在 Swift 中处于后台

Run a Thread every 15 seconds even if app is in background in Swift

我的应用程序每 30 秒从网页获取数据(游戏的更新分数)。问题是如果应用程序在前台并且用户正在查看它,我的 setInterval 运行良好。

但是一旦用户打开任何其他应用程序并将其发送到后台,我的线程就会停止。

有没有办法让它在应用程序处于后台时也能正常工作。

func setInterval(interval:NSTimeInterval, block:()->Void) -> NSTimer
{
    return NSTimer.scheduledTimerWithTimeInterval(interval, target: NSBlockOperation(block: block), selector: #selector(NSOperation.main), userInfo: nil, repeats: true)
}

这是我设置间隔的函数调用

handle = setInterval(TIMEOUT_SEC, block: { () -> Void in

    // do this stuff after 30 seconds
    self.sendScoreService()
})

轮询是最糟糕的情况。除非绝对没有其他方法,否则不应该这样做,因为这对性能尤其是电池寿命很糟糕,特别是如果你打算在后台每 30 秒这样做一次,永远。用户会注意到您的应用正在消耗他们的电池,并会将设备性能不佳归咎于您的应用。

此处更好的解决方案是设置您的应用程序注册的推送服务,该服务会在实际需要时将新的分数信息推送到您的应用程序,而不是您的应用程序必须轮询它。这将最大限度地提高您的应用程序效率,并让您的用户在使用其他应用程序时受到的影响最小。

如果您绝对肯定必须进行后台操作,那么您可以做一些事情。首先,阅读 Apple's background services documentation,然后根据这些指南实施后台操作。但是在你这样做之前深入思考你的问题。