Reputation: 1310
I want to reduce the count down of the time. So If the user minimize app then app loading the background. How can run the timer in application background? I am using the below code. When app is minimized timer is stopped. Please help me.
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;
}
}
Upvotes: 4
Views: 6603
Reputation: 1310
I got the answer, its working perfectly.
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];
Upvotes: 29
Reputation: 19030
Applications don't run in the background forever; you can't guarantee that the timer will continue when the app is closed.
In the app delegate, within applicationDidEnterBackground, save any data that allows the timer to continue when the applicationWillEnterForeground. In your particular case, invalidate the timer on backgrounding, and start it up again on it entering the foreground. With your secondsLeft, you may want to be able to calculate that via a difference in NSDates, and save the start and end dates.
Upvotes: 6