应用程序进入后台时无效的计时器

时间:2013-07-10 16:58:09

标签: ios

我有代码在应用程序进入后台时使计时器无效但当我按下主页按钮等待并打开应用程序备份时,计时器会一直持续而不停止。

我的计时器代码:

-(void) updateTimer {

NSDate *currentDate = [NSDate date];
NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate];
second = (NSUInteger)round(timeInterval);
NSString *string = [NSString stringWithFormat:@"%02u:%02u:%02u",
                    second / 3600, (second / 60) % 60, second % 60];
hhmmssLabel.text = string;
pauseTimeInterval = timeInterval;


}
-(void)pauseTimer {

[tickerTimer invalidate];
tickerTimer = nil;
}

-(void) unPauseTimer {

startDate = [NSDate date] ;
startDate = [startDate dateByAddingTimeInterval:((-1)*(pauseTimeInterval))];
tickerTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/1.0 target:self selector:@selector(updateTimer) userInfo:nil repeats:YES];


}

和我的代码,看看应用程序是否离开了前台

- (void)applicationWillResignActive:(UIApplication *)application
{
if([tickerTimer isValid] && scoringBegan == YES){
[self pauseTimer];
scoringBegan = NO;
[phonePos invalidate];
[baseReset invalidate];
    }
}

- (void)applicationDidEnterBackground:(UIApplication *)application

    {

    if([tickerTimer isValid] && scoringBegan == YES){
        [self pauseTimer];
        scoringBegan = NO;
        [phonePos invalidate];
        [baseReset invalidate];


       }
    }
- (void)applicationWillTerminate:(UIApplication *)application
{

    if([tickerTimer isValid] && scoringBegan == YES){
        [self pauseTimer];
        scoringBegan = NO;
        [phonePos invalidate];
        [baseReset invalidate];
    }
}

**** 更新 * ** < EM> * * 当用户以某个速度运行时,计时器恢复,如果我错了,请更正我,但位置服务仍在后台运行。因此,计时器在暂停后自动恢复。那么有没有办法暂停位置服务?

1 个答案:

答案 0 :(得分:2)

如果您已将标记"App Registers for Location Updates"放在plist中,则位置更新仅在后台运行。删除该标志,您将无法在后台更新。至于你的计时器,我只记录它进入后台的bool。然后,当你收到applicationWillEnterForeground通知时,如果bool是正确的,你可以在那里使计时器无效(因为它不会在后台继续增加)。

或者,您可以致电beginBackgroundTaskWithExpirationHandler:并清理您的计时器并暂停其他一些事情几秒钟。

是的,您可以通过拨打stopUpdatingLocationstopMonitoringSignificantLocationChanges ..或适用于您的位置更新类型的任何内容来暂停位置更新