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

时间:2016-05-01 02:58:51

标签: swift nstimer

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

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

即使app在后台,也有办法让它工作。

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()
})

1 个答案:

答案 0 :(得分:4)

轮询是你最糟糕的情况。除非绝对没有其他方式,否则不应该做的事情,因为它对性能特别是电池寿命很糟糕,特别是如果你打算在后台每隔30秒这样做一次,永远。用户会注意到您的应用正在烧毁他们的电池,并会因为他们的设备性能不佳而责怪您的应用。

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

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