3 回答
TA贡献1880条经验 获得超4个赞
您不应该通过设置计时器来解决此问题,因为不允许您在后台执行任何代码。想象一下,如果用户在此期间或在其他一些极端情况下重新启动iPhone,将会发生什么情况。
使用AppDelegate 的applicationDidEnterBackground:和applicationWillEnterForeground:方法来获取所需的行为。它更加健壮,因为当您的应用由于重启或内存不足而被完全杀死时,它也将起作用。
您可以节省当应用程序进入后台时计时器将在下一次触发的时间,并检查当应用程序返回到前台时是否应采取措施。也可以使用这种方法停止并启动计时器。当您的应用运行时,您可以使用计时器在适当的时候触发更新。
TA贡献1890条经验 获得超9个赞
如果您或其他人正在寻找如何在Swift的后台运行NSTimer的方法,请将以下内容添加到您的App Delegate中:
var backgroundUpdateTask: UIBackgroundTaskIdentifier = 0
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
return true
}
func applicationWillResignActive(application: UIApplication) {
self.backgroundUpdateTask = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler({
self.endBackgroundUpdateTask()
})
}
func endBackgroundUpdateTask() {
UIApplication.sharedApplication().endBackgroundTask(self.backgroundUpdateTask)
self.backgroundUpdateTask = UIBackgroundTaskInvalid
}
func applicationWillEnterForeground(application: UIApplication) {
self.endBackgroundUpdateTask()
}
干杯!
- 3 回答
- 0 关注
- 406 浏览
添加回答
举报