当应用程序在后台运行时预定NSTimer?

当应用程序在后台运行时,人们如何处理预定的NSTimer?


假设我每小时更新一次我的应用程序中的内容。


updateTimer = [NSTimer scheduledTimerWithTimeInterval:60.0*60.0 

target:self 

selector:@selector(updateStuff) 

userInfo:nil 

repeats:YES];

在后台时,此计时器显然不会触发(?)。当用户回到应用程序时该怎么办?计时器是否仍在运行同一时间?


如果用户在一个小时后回来,将会发生什么。它会在错过的所有时间触发还是会等到下一个更新时间?


我希望它执行的操作是在应用程序启动后立即更新,如果它应该触发的日期是过去的话。那可能吗?


凤凰求蛊
浏览 387回答 3
3回答

慕村225694

您不应该通过设置计时器来解决此问题,因为不允许您在后台执行任何代码。想象一下,如果用户在此期间或在其他一些极端情况下重新启动iPhone,将会发生什么情况。使用AppDelegate 的applicationDidEnterBackground:和applicationWillEnterForeground:方法来获取所需的行为。它更加健壮,因为当您的应用由于重启或内存不足而被完全杀死时,它也将起作用。您可以节省当应用程序进入后台时计时器将在下一次触发的时间,并检查当应用程序返回到前台时是否应采取措施。也可以使用这种方法停止并启动计时器。当您的应用运行时,您可以使用计时器在适当的时候触发更新。

当年话下

如果您或其他人正在寻找如何在Swift的后台运行NSTimer的方法,请将以下内容添加到您的App Delegate中:var backgroundUpdateTask: UIBackgroundTaskIdentifier = 0func 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()}干杯!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

iOS