4

我想减少倒计时的时间。因此,如果用户最小化应用程序,则应用程序加载背景。如何在应用程序后台运行计时器?我正在使用下面的代码。当应用程序最小化时,计时器停止。请帮我。

        timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerCountDown) userInfo:nil repeats:YES];

- (void)timerCountDown
{
    if(secondsLeft > 0 ) {
        secondsLeft -- ;
        hours = secondsLeft / 3600;
        minutes = (secondsLeft % 3600) / 60;
        seconds = (secondsLeft %3600) % 60;
    }
}
4

2 回答 2

29

我得到了答案,它工作得很好。

UIBackgroundTaskIdentifier bgTask =0;
UIApplication  *app = [UIApplication sharedApplication];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
    [app endBackgroundTask:bgTask];
}];

timer = [NSTimer
               scheduledTimerWithTimeInterval:1.0
               target:self
               selector:@selector(timerCountDown:)
               userInfo:nil
               repeats:YES];
于 2012-10-17T11:17:21.157 回答
6

应用程序不会永远在后台运行;您不能保证应用程序关闭时计时器会继续。

在应用程序委托中,在 applicationDidEnterBackground 内,保存任何允许计时器在 applicationWillEnterForeground 时继续运行的数据。在您的特定情况下,使后台计时器无效,并在进入前台时再次启动它。使用您的 secondsLeft,您可能希望能够通过 NSDates 的差异来计算它,并保存开始和结束日期。

于 2012-10-16T14:18:45.463 回答